Compare commits
761 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fcdda32a3b | ||
|
|
9d8211fb4f | ||
|
|
2191e921fd | ||
|
|
e27d5801b5 | ||
|
|
9e04f34b43 | ||
|
|
41e66adea0 | ||
|
|
e750a3a1f7 | ||
|
|
88eb1b4b1e | ||
|
|
40e8161ee5 | ||
|
|
6b5172c136 | ||
|
|
f5565c3177 | ||
|
|
08d749b515 | ||
|
|
d65f9d10e1 | ||
|
|
d884e9477c | ||
|
|
021437c673 | ||
|
|
ae9281aa4a | ||
|
|
0569e5b524 | ||
|
|
2044fc12c2 | ||
|
|
173cd374fd | ||
|
|
161d2ac3ef | ||
|
|
4587d29380 | ||
|
|
cd50b3e744 | ||
|
|
ed2e894dda | ||
|
|
a620dfa18d | ||
|
|
27c64c000d | ||
|
|
579812c905 | ||
|
|
e44fbe218e | ||
|
|
ae479cef24 | ||
|
|
4ce87b54d4 | ||
|
|
3837bd71c6 | ||
|
|
6993db7d34 | ||
|
|
785ee3c8e0 | ||
|
|
d4b8700ba9 | ||
|
|
7598e6c39c | ||
|
|
d8fae4d641 | ||
|
|
b0501506aa | ||
|
|
501638e298 | ||
|
|
4b4ce3bb27 | ||
|
|
9015986f09 | ||
|
|
a35bd53fef | ||
|
|
042fd1a353 | ||
|
|
23d6d018ee | ||
|
|
a23aca3b2d | ||
|
|
cde8ebe01a | ||
|
|
bd0a7d2327 | ||
|
|
edae3ef86e | ||
|
|
c220a5404c | ||
|
|
169648d1e9 | ||
|
|
3c6b2441cf | ||
|
|
443a7b8cc8 | ||
|
|
4379af7908 | ||
|
|
100256529b | ||
|
|
4415ac60d0 | ||
|
|
84b4a003c6 | ||
|
|
a7ebd365ef | ||
|
|
235cdda4d1 | ||
|
|
637d2115ac | ||
|
|
72c6a1715a | ||
|
|
17074d01a1 | ||
|
|
e68bf3bc8e | ||
|
|
f22aad4c03 | ||
|
|
51d34999ee | ||
|
|
294cc23d84 | ||
|
|
3148e66263 | ||
|
|
079b88eb12 | ||
|
|
68556dbd6a | ||
|
|
5cd17e333a | ||
|
|
7e511e09b2 | ||
|
|
5dec81039a | ||
|
|
62c210067d | ||
|
|
11fae84a48 | ||
|
|
67a576f0d8 | ||
|
|
cf4980fc0e | ||
|
|
01797e3b94 | ||
|
|
a9e06e0a91 | ||
|
|
946842ac87 | ||
|
|
d4fa45e498 | ||
|
|
26925bd149 | ||
|
|
79c3d3a396 | ||
|
|
c9acd9c847 | ||
|
|
0d30802c02 | ||
|
|
727f86bc4b | ||
|
|
f1e85c3987 | ||
|
|
962e348183 | ||
|
|
56a98102b4 | ||
|
|
67fc6bb623 | ||
|
|
f7120a0c3d | ||
|
|
6a692aac63 | ||
|
|
a520629b6f | ||
|
|
4a310c8af7 | ||
|
|
f31b8e6867 | ||
|
|
34c5e9b147 | ||
|
|
fde698f778 | ||
|
|
1557017613 | ||
|
|
4a55b39829 | ||
|
|
3a34c2ab29 | ||
|
|
eb39599102 | ||
|
|
2e1c399005 | ||
|
|
bcfff134ad | ||
|
|
2f329dd44f | ||
|
|
1ffb8e8fec | ||
|
|
47aaa52f44 | ||
|
|
9b09dbb2b0 | ||
|
|
cdc60f7575 | ||
|
|
2a377bf65a | ||
|
|
4ee96a0c70 | ||
|
|
d7c51af4d8 | ||
|
|
3850e34f9d | ||
|
|
303b6727c2 | ||
|
|
dd28daf9aa | ||
|
|
5649bec858 | ||
|
|
1fb16353a7 | ||
|
|
4b65a04953 | ||
|
|
c595018a42 | ||
|
|
ddc1dba82a | ||
|
|
304ea85e94 | ||
|
|
3619d5caa1 | ||
|
|
3493f9845d | ||
|
|
4c2d411d7c | ||
|
|
dbd5a248df | ||
|
|
6d84610037 | ||
|
|
e342d7351c | ||
|
|
ee96bb69fb | ||
|
|
86f77a9019 | ||
|
|
dc6dff18c6 | ||
|
|
88d7b9cc51 | ||
|
|
46e4bcc34f | ||
|
|
42249e5007 | ||
|
|
b701e1cfe7 | ||
|
|
99f97927c3 | ||
|
|
cc938b8cb2 | ||
|
|
08fb51a42b | ||
|
|
c4b87e8526 | ||
|
|
5611eebafb | ||
|
|
b558147ba0 | ||
|
|
af633f74e8 | ||
|
|
59bc433af9 | ||
|
|
5b5e415834 | ||
|
|
b7259ad554 | ||
|
|
7d7a4efd09 | ||
|
|
88a21bdf44 | ||
|
|
4dcdcce3ff | ||
|
|
5a05e9d500 | ||
|
|
213e64339b | ||
|
|
af714cbdcd | ||
|
|
f36f1dc975 | ||
|
|
0c456f7fb2 | ||
|
|
ca468bc85b | ||
|
|
a33bd84d54 | ||
|
|
92b88c61ac | ||
|
|
bab0ebc50d | ||
|
|
9ca1cd57ca | ||
|
|
069e430ae4 | ||
|
|
02b7a19dfe | ||
|
|
94c420c85b | ||
|
|
ea185dfce6 | ||
|
|
3bc52cf369 | ||
|
|
41a9199800 | ||
|
|
5de2633cc5 | ||
|
|
62610f6114 | ||
|
|
6f47b64c6d | ||
|
|
86b7c0bc08 | ||
|
|
19d707d927 | ||
|
|
86c305de39 | ||
|
|
cd6717b4ee | ||
|
|
60916dd1fe | ||
|
|
91186164a8 | ||
|
|
5b33c563e2 | ||
|
|
77922b4ec8 | ||
|
|
423ba3b1d5 | ||
|
|
52bf301299 | ||
|
|
a20680186f | ||
|
|
276f61d09f | ||
|
|
e2d0e02efd | ||
|
|
862924d526 | ||
|
|
b6cdb35d3d | ||
|
|
a568c01505 | ||
|
|
5950ef6506 | ||
|
|
a0579e7834 | ||
|
|
856763adba | ||
|
|
0b3bc44566 | ||
|
|
f87ee28c0a | ||
|
|
f2b70a17c3 | ||
|
|
b5bac8ab36 | ||
|
|
102e588cfd | ||
|
|
d8e2777321 | ||
|
|
33931eee91 | ||
|
|
3f9180b5c0 | ||
|
|
4cfa2b978a | ||
|
|
6b63039e51 | ||
|
|
164f9fe0a6 | ||
|
|
0a12e90cb5 | ||
|
|
04ee4fa925 | ||
|
|
ec7da49c42 | ||
|
|
09d696b9c5 | ||
|
|
9041c04c52 | ||
|
|
181e5dd4b0 | ||
|
|
630f7bbfcf | ||
|
|
d2e26bb194 | ||
|
|
529e7a235b | ||
|
|
f4c9a045f2 | ||
|
|
f368c6448a | ||
|
|
4a7088e8b0 | ||
|
|
c98bbdffd1 | ||
|
|
48db9dad9c | ||
|
|
f372f318d6 | ||
|
|
6fef57061c | ||
|
|
04541ba0dd | ||
|
|
fdbbf21270 | ||
|
|
155a8c1bc1 | ||
|
|
36e0f91201 | ||
|
|
590a83fdc5 | ||
|
|
67b051577c | ||
|
|
61cf7cdf37 | ||
|
|
0d053c69bf | ||
|
|
67c4958b65 | ||
|
|
0fba2e0643 | ||
|
|
012d1cfeb8 | ||
|
|
db856a5cd3 | ||
|
|
d6cea2efee | ||
|
|
2c2c6a32e0 | ||
|
|
a692f3bb8c | ||
|
|
ecbc0967fd | ||
|
|
5fb0e4a5b8 | ||
|
|
e4c764483f | ||
|
|
16690444c2 | ||
|
|
596163833d | ||
|
|
42cc3b0ebc | ||
|
|
cbb224784f | ||
|
|
28a7d4bd33 | ||
|
|
bb14c0739c | ||
|
|
e6a6fc62e3 | ||
|
|
4cac44220e | ||
|
|
5e0b0db076 | ||
|
|
60712faceb | ||
|
|
53f612a22b | ||
|
|
e0473f8619 | ||
|
|
7ecca09acc | ||
|
|
793f549770 | ||
|
|
f863490fea | ||
|
|
38b3aec21d | ||
|
|
e7db0285ef | ||
|
|
e20cb65f34 | ||
|
|
2bda800f9e | ||
|
|
3421356529 | ||
|
|
a2b0d69931 | ||
|
|
ff8ecee321 | ||
|
|
fa77da1742 | ||
|
|
e9979ffd0e | ||
|
|
45a8b68328 | ||
|
|
832e699b52 | ||
|
|
92698a3685 | ||
|
|
da98113f10 | ||
|
|
33264f9a98 | ||
|
|
02f86a8725 | ||
|
|
7d719ca802 | ||
|
|
078dc8d1e0 | ||
|
|
703360538d | ||
|
|
3d1beab793 | ||
|
|
4ca32b4d22 | ||
|
|
915970c1aa | ||
|
|
4c3c8ccb37 | ||
|
|
5a51022496 | ||
|
|
ae4c544f6f | ||
|
|
40faa0eb2c | ||
|
|
9e288db02d | ||
|
|
2ed43d34a1 | ||
|
|
ad694e0477 | ||
|
|
72c75b7772 | ||
|
|
8958d7df24 | ||
|
|
c88f51af7c | ||
|
|
9ffa5e6d79 | ||
|
|
e6dc4cb368 | ||
|
|
7f56a6f0f1 | ||
|
|
d79c3cb16c | ||
|
|
a153154910 | ||
|
|
0120221193 | ||
|
|
8b48e2d4a3 | ||
|
|
0c6a4327d3 | ||
|
|
960ae4650b | ||
|
|
9a86cb15da | ||
|
|
735d1ab7cc | ||
|
|
0ab3c46794 | ||
|
|
0defb20de9 | ||
|
|
26f17f6bf0 | ||
|
|
668592c6e7 | ||
|
|
f69dd4083c | ||
|
|
5eceeba1f5 | ||
|
|
65778d9f0f | ||
|
|
aa80c88cc4 | ||
|
|
ec09e5e54c | ||
|
|
94b1b432ec | ||
|
|
8f788c1d13 | ||
|
|
4d7a3a6dd6 | ||
|
|
0156e1e417 | ||
|
|
118ce7d1d9 | ||
|
|
9dc38dd769 | ||
|
|
11726f8764 | ||
|
|
3ab863f0d5 | ||
|
|
6435a4ebdb | ||
|
|
b965270152 | ||
|
|
55c1ee1c7b | ||
|
|
9675c27073 | ||
|
|
b4e74ad93c | ||
|
|
1834b9a96e | ||
|
|
b8a83d2b68 | ||
|
|
ec69039673 | ||
|
|
fe684e7eb3 | ||
|
|
456635ac2c | ||
|
|
209e4fccb5 | ||
|
|
3404da90de | ||
|
|
414d6579a1 | ||
|
|
673d0f79ed | ||
|
|
7cf9980c1f | ||
|
|
e8d6b75c36 | ||
|
|
9f01d93689 | ||
|
|
984df727b9 | ||
|
|
6f5584eee1 | ||
|
|
74a0be8d8b | ||
|
|
c92aa046c9 | ||
|
|
42a40132a1 | ||
|
|
b09224eee3 | ||
|
|
4724bb8b4d | ||
|
|
d33d59c234 | ||
|
|
8ec829f1b6 | ||
|
|
80e0b44f18 | ||
|
|
e4e8207552 | ||
|
|
020eb7bea1 | ||
|
|
cb89fe494c | ||
|
|
388d983390 | ||
|
|
478589576b | ||
|
|
6766aec23d | ||
|
|
3e5598b2a4 | ||
|
|
b1c5738a6e | ||
|
|
79a0a88912 | ||
|
|
359220c9ce | ||
|
|
a2b2d50586 | ||
|
|
66cfda93ce | ||
|
|
7c237457f6 | ||
|
|
df840cdf26 | ||
|
|
d961c39bd8 | ||
|
|
f99275fabe | ||
|
|
b279de93be | ||
|
|
d0753238c0 | ||
|
|
243dff060b | ||
|
|
78a1d89f40 | ||
|
|
3d53f18644 | ||
|
|
2fd4a6c711 | ||
|
|
425efbbbbe | ||
|
|
8d2c091641 | ||
|
|
723988783c | ||
|
|
d3aa4cb6e4 | ||
|
|
d9ecb0751b | ||
|
|
8e054c9a52 | ||
|
|
6665d7fb41 | ||
|
|
1c741db4fd | ||
|
|
92e561d10f | ||
|
|
e84bbd0ac8 | ||
|
|
8d9c04ab8f | ||
|
|
8e2d00e30b | ||
|
|
9dc324c468 | ||
|
|
ab8c2381ae | ||
|
|
74cf8fa64d | ||
|
|
0b5be0aa3d | ||
|
|
2c88d42bd5 | ||
|
|
ef61b5adf2 | ||
|
|
f3d6aa2dc3 | ||
|
|
3c90778b2d | ||
|
|
a9b53833ed | ||
|
|
4a5cbe22ea | ||
|
|
53133bd07d | ||
|
|
6707f48a19 | ||
|
|
8034bd3423 | ||
|
|
243545e4f0 | ||
|
|
cfef990488 | ||
|
|
1e4dc2803e | ||
|
|
9674c1fe6a | ||
|
|
35af0b4af8 | ||
|
|
6bb4769193 | ||
|
|
5f6cc24d62 | ||
|
|
463e9f8453 | ||
|
|
dc80cd7352 | ||
|
|
9d9010b017 | ||
|
|
dbc6793d3f | ||
|
|
76ceba1640 | ||
|
|
0f1f490cfc | ||
|
|
2a93b292e3 | ||
|
|
28816933a3 | ||
|
|
d85742fcb1 | ||
|
|
d68e3ad873 | ||
|
|
0e3f823288 | ||
|
|
4cc55c1e71 | ||
|
|
67890f6e58 | ||
|
|
5becbfc25e | ||
|
|
4d1b876722 | ||
|
|
e05d4a5120 | ||
|
|
62a6a93d99 | ||
|
|
3086e18529 | ||
|
|
e6f89c5336 | ||
|
|
94f9c53ca4 | ||
|
|
6bae786fa8 | ||
|
|
d198819b03 | ||
|
|
cc849dd090 | ||
|
|
14ff0d088e | ||
|
|
8a5f3217ab | ||
|
|
b43c82a697 | ||
|
|
f874d52901 | ||
|
|
1ea8ed36a1 | ||
|
|
38f6ab61d1 | ||
|
|
c7002c08ef | ||
|
|
8f68095d67 | ||
|
|
646fbd0288 | ||
|
|
ee9f3a4b1b | ||
|
|
aada055669 | ||
|
|
b6a4be7f01 | ||
|
|
de9abfd108 | ||
|
|
08b6b94bd3 | ||
|
|
98a2b68389 | ||
|
|
9cf0415590 | ||
|
|
085a178ab4 | ||
|
|
dbee17e590 | ||
|
|
2d44d6e2b1 | ||
|
|
5957d784c8 | ||
|
|
bcd643f27a | ||
|
|
8a56722c36 | ||
|
|
194880b170 | ||
|
|
5994a8172e | ||
|
|
3de068e389 | ||
|
|
7d2676f4a0 | ||
|
|
caac06125f | ||
|
|
86ab24b0fd | ||
|
|
b5a6cd8557 | ||
|
|
bc796a104f | ||
|
|
aba3aaf852 | ||
|
|
6fc5a7eab5 | ||
|
|
8b9fc20160 | ||
|
|
640d446755 | ||
|
|
57a346a99f | ||
|
|
6ceb498924 | ||
|
|
7d1d20ab23 | ||
|
|
4ca81a4b6f | ||
|
|
a6ac89e1ad | ||
|
|
93fb8a9388 | ||
|
|
6edd85105a | ||
|
|
f248ea0d64 | ||
|
|
6bb2cedaaa | ||
|
|
2a94842ed5 | ||
|
|
285493dc9b | ||
|
|
aac49a1052 | ||
|
|
d6c6f4b88d | ||
|
|
a5490e5609 | ||
|
|
018de76858 | ||
|
|
3963244907 | ||
|
|
9792a1b1cd | ||
|
|
6d71034c43 | ||
|
|
885fb4d0eb | ||
|
|
b34d0c0bb5 | ||
|
|
716c03967a | ||
|
|
adbdc888eb | ||
|
|
67257981b1 | ||
|
|
e844edc049 | ||
|
|
be60096748 | ||
|
|
91b268c272 | ||
|
|
323903cc4e | ||
|
|
7f9acd934c | ||
|
|
ccf1c9cda5 | ||
|
|
436cccdb3c | ||
|
|
3d113980ac | ||
|
|
fab234a0ca | ||
|
|
de5076402c | ||
|
|
464b1932ad | ||
|
|
048a3d7464 | ||
|
|
9aca0ee731 | ||
|
|
f540402274 | ||
|
|
ccf21435d5 | ||
|
|
b9ccc837ef | ||
|
|
901c3ecfd2 | ||
|
|
7038cc063d | ||
|
|
754b8eeed8 | ||
|
|
b4aff4564b | ||
|
|
e5e7c6dad2 | ||
|
|
8a20fca86e | ||
|
|
ad861ecce2 | ||
|
|
5bb59c18fa | ||
|
|
a76a3d15b2 | ||
|
|
5beb03dc62 | ||
|
|
54e3d416b6 | ||
|
|
0ce898669a | ||
|
|
044e2de97f | ||
|
|
b1c3367e44 | ||
|
|
a7dd596811 | ||
|
|
bd7512136d | ||
|
|
6d6c4d0e5c | ||
|
|
00e8696417 | ||
|
|
65681183e2 | ||
|
|
df419e2f77 | ||
|
|
91bd4db97d | ||
|
|
20a6397a72 | ||
|
|
0eb1d1ef8f | ||
|
|
ae41447ba3 | ||
|
|
e7beb7e493 | ||
|
|
dd17aad744 | ||
|
|
1b3f7ca7dd | ||
|
|
289124889d | ||
|
|
39d29ca66b | ||
|
|
504c610465 | ||
|
|
d083bc6cdf | ||
|
|
7ca503484a | ||
|
|
7c322b1f5a | ||
|
|
1b77f99a1d | ||
|
|
aaa517e135 | ||
|
|
3d8174f938 | ||
|
|
7f3b076219 | ||
|
|
7b83d618e0 | ||
|
|
eef687df68 | ||
|
|
67ca675a23 | ||
|
|
ebfaebb8ae | ||
|
|
0f4fefe735 | ||
|
|
e0ef763c23 | ||
|
|
f7e68e1481 | ||
|
|
ca1218559c | ||
|
|
b505bf7dc4 | ||
|
|
01d7cff367 | ||
|
|
a5d8c86d87 | ||
|
|
5f8a15749e | ||
|
|
0f367c64c2 | ||
|
|
6cd4e4652a | ||
|
|
d9bd1c5617 | ||
|
|
66d9cc77c7 | ||
|
|
fa4acc48e1 | ||
|
|
c27117f07b | ||
|
|
300b89d09a | ||
|
|
e65fb6559a | ||
|
|
bf39dd92fd | ||
|
|
821e48b71a | ||
|
|
d4fd601f76 | ||
|
|
2055908377 | ||
|
|
5029631606 | ||
|
|
58d0fec879 | ||
|
|
fd4cad470f | ||
|
|
a97e13d9f1 | ||
|
|
66593a3c0b | ||
|
|
33390b9216 | ||
|
|
a21fc260c9 | ||
|
|
642ba318f7 | ||
|
|
410dab86e2 | ||
|
|
146d64ad95 | ||
|
|
b685b1c5a7 | ||
|
|
10abf7711e | ||
|
|
558cc924f6 | ||
|
|
5980ee5cbd | ||
|
|
c49fec1246 | ||
|
|
9bb0e6100d | ||
|
|
33f8be2d6a | ||
|
|
cd5949f3ca | ||
|
|
c129ceb938 | ||
|
|
7b28694ec9 | ||
|
|
7420982988 | ||
|
|
5e7a6175f5 | ||
|
|
bd60a7ea0a | ||
|
|
3c6d6c586a | ||
|
|
56fc5643e3 | ||
|
|
f71d36d64e | ||
|
|
cfc84c0bbb | ||
|
|
f8dbbcbbaf | ||
|
|
c521fb5a61 | ||
|
|
304168ef1b | ||
|
|
c8b23c8aa9 | ||
|
|
11cd094f5d | ||
|
|
6091033f08 | ||
|
|
ffd6c38382 | ||
|
|
3aaa60e132 | ||
|
|
ca6df84efa | ||
|
|
7da7e9f223 | ||
|
|
52c26b59ea | ||
|
|
066663aa38 | ||
|
|
8e7615f816 | ||
|
|
145f7819cc | ||
|
|
8bad47f29a | ||
|
|
320ad3a0b8 | ||
|
|
b5130e9e2f | ||
|
|
0eb2bd260d | ||
|
|
e513a72285 | ||
|
|
d88d8ccad4 | ||
|
|
89016de081 | ||
|
|
eeb243befb | ||
|
|
ee67f384ac | ||
|
|
6d0ab5ed59 | ||
|
|
a1d12b36ef | ||
|
|
7f591a4ab3 | ||
|
|
33fdfb59c4 | ||
|
|
eb8eae954f | ||
|
|
003493e600 | ||
|
|
74ffe48ba6 | ||
|
|
adacd132d2 | ||
|
|
4e940fd0b1 | ||
|
|
ee42b04c54 | ||
|
|
8ce8be3e49 | ||
|
|
2da31e120c | ||
|
|
af37aa8916 | ||
|
|
6675c4a509 | ||
|
|
308f4b35f9 | ||
|
|
350cadb9dc | ||
|
|
1548c706f8 | ||
|
|
c0bd633279 | ||
|
|
da7a664e77 | ||
|
|
107adf6c57 | ||
|
|
ca6d64ba4d | ||
|
|
a556c5419d | ||
|
|
00145c83bb | ||
|
|
75ce48af06 | ||
|
|
0e95ef55ab | ||
|
|
bbfbba30de | ||
|
|
f7c16c06ed | ||
|
|
2dd46fc86a | ||
|
|
7edc7aaece | ||
|
|
5f4a59aea4 | ||
|
|
26aab953a2 | ||
|
|
7dfa30a754 | ||
|
|
137d5c7566 | ||
|
|
f864233ac1 | ||
|
|
8283cc1626 | ||
|
|
f4442a5748 | ||
|
|
69220ab2e0 | ||
|
|
b839790a48 | ||
|
|
70ab5a9728 | ||
|
|
96bd4403ab | ||
|
|
e8b49071ec | ||
|
|
d07325aca8 | ||
|
|
215457f670 | ||
|
|
a3982da33e | ||
|
|
a8013449ac | ||
|
|
3db3711710 | ||
|
|
3ce0217cfd | ||
|
|
d5fcba999d | ||
|
|
5decf0f940 | ||
|
|
0e8f6e7f9e | ||
|
|
c73227f944 | ||
|
|
2b7a70dd01 | ||
|
|
c20e0b9b62 | ||
|
|
f966f2d956 | ||
|
|
46b741dbbb | ||
|
|
dc610b0484 | ||
|
|
80798cd80c | ||
|
|
0d0d58611c | ||
|
|
8a6943abae | ||
|
|
aa29a55a9f | ||
|
|
76efbff6d9 | ||
|
|
c1714aa83b | ||
|
|
7bdb18da7e | ||
|
|
5b53736469 | ||
|
|
b4182c3502 | ||
|
|
141c6f1e9a | ||
|
|
402a7c5a46 | ||
|
|
61362b9cb8 | ||
|
|
55af0d719f | ||
|
|
c19b8b060b | ||
|
|
cafc765b7f | ||
|
|
072d51ab05 | ||
|
|
ce4959442a | ||
|
|
c4f1aa9d82 | ||
|
|
10b08d573c | ||
|
|
214a4bda8d | ||
|
|
919d26a765 | ||
|
|
48d70a685c | ||
|
|
03b5afb47b | ||
|
|
5f7ac07e0b | ||
|
|
b91cb4fbce | ||
|
|
72431b3a5c | ||
|
|
e0d50496a4 | ||
|
|
8de5263e30 | ||
|
|
ed60ba9ebf | ||
|
|
1ac705b479 | ||
|
|
bc229faf16 | ||
|
|
721e8bc19c | ||
|
|
a22c0e966b | ||
|
|
1c4d36900a | ||
|
|
672e613b18 | ||
|
|
98ad484674 | ||
|
|
0da9218823 | ||
|
|
953eb3517c | ||
|
|
9edbacf9ae | ||
|
|
d68176ff42 | ||
|
|
57c7db1e24 | ||
|
|
80e81db556 | ||
|
|
6a374fe38c | ||
|
|
5c195bfa01 | ||
|
|
a728575a03 | ||
|
|
838c68a94a | ||
|
|
c005801b18 | ||
|
|
8cf11bf25b | ||
|
|
71320e4a63 | ||
|
|
f895c949fd | ||
|
|
4f35b9b330 | ||
|
|
5d526a9e8c | ||
|
|
9f46cd434e | ||
|
|
b3b7f127a5 | ||
|
|
cc92d90e1f | ||
|
|
0837ceec9e | ||
|
|
31ffe13c7e | ||
|
|
dca177f2b7 | ||
|
|
32dc21d247 | ||
|
|
79b2ad081c | ||
|
|
d240a40e9c | ||
|
|
ed33893376 | ||
|
|
7c5f81f0df | ||
|
|
a0bd88a21a | ||
|
|
32b06bd62e | ||
|
|
7b043f79f1 | ||
|
|
5832bbc76b | ||
|
|
d12d3daaa4 | ||
|
|
e5fc13f65b | ||
|
|
ecd38111e9 | ||
|
|
3acc1e50b1 | ||
|
|
f59659f0f3 | ||
|
|
55234ae8df | ||
|
|
d6b00054aa | ||
|
|
effa6bf49a | ||
|
|
fe293eca4b | ||
|
|
52fd330b48 | ||
|
|
c63711060c | ||
|
|
adc13aab53 | ||
|
|
90e17b9d6e | ||
|
|
bcfc2e85f6 | ||
|
|
544076665e | ||
|
|
13b2d9d2f9 | ||
|
|
f3cc628a57 | ||
|
|
ecc832968a | ||
|
|
d066c5357d | ||
|
|
48f6e7488e | ||
|
|
e563599910 | ||
|
|
cbca2a8cfe | ||
|
|
206f776ac1 | ||
|
|
7b421d59b3 | ||
|
|
b2fb46c5b0 | ||
|
|
750747d877 | ||
|
|
c897b82d53 | ||
|
|
fa6a4660a8 | ||
|
|
99a26ddd65 | ||
|
|
6048a896ec | ||
|
|
5b5e286ab5 | ||
|
|
40ec3b2220 | ||
|
|
d780c9f1f4 | ||
|
|
ef46d1c5e0 | ||
|
|
4bce043263 | ||
|
|
6ad30daeef | ||
|
|
33584fa506 | ||
|
|
a09d52cf0f | ||
|
|
d4737d26e3 | ||
|
|
4dcab81daf | ||
|
|
3bf5484a12 | ||
|
|
8acb04c040 | ||
|
|
70cf8089e9 | ||
|
|
51c889c7f4 | ||
|
|
065eefafd7 | ||
|
|
b270dcaf24 | ||
|
|
e16c303b9d | ||
|
|
5964cf8d9e | ||
|
|
94e1473fc4 | ||
|
|
2bd2058627 | ||
|
|
12217947db |
4
.arcconfig
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"project.name" : "Kdenlive",
|
||||
"phabricator.uri" : "https://phabricator.kde.org/"
|
||||
}
|
||||
26
AUTHORS
@@ -1,23 +1,23 @@
|
||||
Active Kdenlive authors
|
||||
|
||||
Vincent Pinon <vpinon@april.org>
|
||||
Bugs fixing, release
|
||||
2012-present
|
||||
Jean-Baptiste Mardelle <jb@kdenlive.org>
|
||||
MLT and KDE SC 4 porting, main developer
|
||||
Main developer and maintainer, MLT and KDE SC 4 / KF5 port,
|
||||
2005-present
|
||||
Laurent Montel <montel@kde.org>
|
||||
Bugs fixing, code clean up, review
|
||||
2013-present
|
||||
Till Theato <root@ttill.de>
|
||||
Bug fixing, etc.
|
||||
2010-present
|
||||
Steve Guilford <s.guilford@dbplugins.com>
|
||||
Bug fixing
|
||||
2014
|
||||
Vincent Pinon <vpinon@kde.org>
|
||||
Interim maintainer, Windows cross-build, KF5 port, profiles updates, etc.
|
||||
2012-present
|
||||
|
||||
Former Kdenlive authors
|
||||
|
||||
Laurent Montel <montel@kde.org>
|
||||
Bugs fixing, code clean up, review
|
||||
2013-2017
|
||||
Till Theato <root@ttill.de>
|
||||
Bug fixing, etc.
|
||||
2010-2015
|
||||
Steve Guilford <s.guilford@dbplugins.com>
|
||||
Bug fixing
|
||||
2014
|
||||
Simon A. Eugster (Granjow) <simon.eu@gmail.com>
|
||||
Colour and audio scopes, titler, manual, bug fixing, etc.
|
||||
2009-2012
|
||||
|
||||
@@ -4,32 +4,38 @@ project(Kdenlive)
|
||||
# stable release. An additional number can be used for bugfix-only releases.
|
||||
|
||||
# KDE Application Version, managed by release script
|
||||
set (KDE_APPLICATIONS_VERSION_MAJOR "16")
|
||||
set (KDE_APPLICATIONS_VERSION_MAJOR "18")
|
||||
set (KDE_APPLICATIONS_VERSION_MINOR "12")
|
||||
set (KDE_APPLICATIONS_VERSION_MICRO "0")
|
||||
|
||||
set(KDENLIVE_VERSION ${KDE_APPLICATIONS_VERSION_MAJOR}.${KDE_APPLICATIONS_VERSION_MINOR}.${KDE_APPLICATIONS_VERSION_MICRO})
|
||||
cmake_minimum_required(VERSION 2.8.12)
|
||||
cmake_minimum_required(VERSION 3.0)
|
||||
if(POLICY CMP0063)
|
||||
cmake_policy(SET CMP0063 NEW)
|
||||
endif()
|
||||
if (POLICY CMP0053)
|
||||
cmake_policy(SET CMP0053 NEW)
|
||||
endif()
|
||||
# Minimum versions of main dependencies.
|
||||
set(MLT_MIN_MAJOR_VERSION 6)
|
||||
set(MLT_MIN_MINOR_VERSION 0)
|
||||
set(MLT_MIN_MINOR_VERSION 10)
|
||||
set(MLT_MIN_PATCH_VERSION 0)
|
||||
set(MLT_MIN_VERSION ${MLT_MIN_MAJOR_VERSION}.${MLT_MIN_MINOR_VERSION}.${MLT_MIN_PATCH_VERSION})
|
||||
|
||||
set(QT_MIN_VERSION 5.2.0)
|
||||
set(QT_MIN_VERSION 5.6.0)
|
||||
|
||||
find_package(ECM 1.2.0 REQUIRED CONFIG)
|
||||
find_package(ECM 5.18.0 REQUIRED CONFIG)
|
||||
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/modules)
|
||||
include(KDECompilerSettings NO_POLICY_SCOPE)
|
||||
include(FeatureSummary)
|
||||
include(ECMInstallIcons)
|
||||
include(GenerateExportHeader)
|
||||
include(KDEInstallDirs)
|
||||
include(KDECMakeSettings)
|
||||
include(KDECompilerSettings)
|
||||
include(ECMOptionalAddSubdirectory)
|
||||
include(ECMMarkNonGuiExecutable)
|
||||
include(ECMAddAppIcon)
|
||||
include(ECMQtDeclareLoggingCategory)
|
||||
|
||||
add_definitions(-DQT_NO_CAST_TO_ASCII)
|
||||
add_definitions(-DQT_NO_URL_CAST_FROM_STRING)
|
||||
@@ -37,7 +43,6 @@ add_definitions(-DTRANSLATION_DOMAIN=\"kdenlive\")
|
||||
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH})
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
|
||||
# To be switched on when releasing.
|
||||
option(RELEASE_BUILD "Remove Git revision from program version (use for stable releases)" ON)
|
||||
|
||||
@@ -73,7 +78,7 @@ include(CheckIncludeFiles)
|
||||
check_include_files(malloc.h HAVE_MALLOC_H)
|
||||
check_include_files(pthread.h HAVE_PTHREAD_H)
|
||||
|
||||
find_package(Qt5 REQUIRED COMPONENTS Core DBus Widgets Script Svg Quick )
|
||||
find_package(Qt5 REQUIRED COMPONENTS Core DBus Widgets Script Svg Quick Concurrent)
|
||||
find_package(Qt5 OPTIONAL_COMPONENTS WebKitWidgets QUIET)
|
||||
|
||||
find_package(KF5 5.23.0 OPTIONAL_COMPONENTS XmlGui QUIET)
|
||||
@@ -85,8 +90,11 @@ else()
|
||||
endif()
|
||||
|
||||
find_package(KF5 REQUIRED COMPONENTS Archive Bookmarks CoreAddons Config ConfigWidgets
|
||||
DBusAddons KIO WidgetsAddons NotifyConfig NewStuff XmlGui Notifications GuiAddons TextWidgets IconThemes Crash
|
||||
OPTIONAL_COMPONENTS DocTools FileMetaData)
|
||||
DBusAddons KIO WidgetsAddons NotifyConfig NewStuff XmlGui Notifications GuiAddons TextWidgets IconThemes
|
||||
OPTIONAL_COMPONENTS DocTools FileMetaData Crash Purpose)
|
||||
if(WIN32)
|
||||
find_package(DrMinGW)
|
||||
endif(WIN32)
|
||||
|
||||
if (KF5FileMetaData_FOUND)
|
||||
message(STATUS "Found KF5 FileMetadata to extract file metadata")
|
||||
@@ -95,6 +103,13 @@ else()
|
||||
message(STATUS "KF5 FileMetadata not found, file metadata will not be available")
|
||||
endif()
|
||||
|
||||
if (KF5Purpose_FOUND)
|
||||
message(STATUS "Found KF5 Purpose, filesharing enabled")
|
||||
set(KF5_PURPOSE TRUE)
|
||||
else()
|
||||
message(STATUS "KF5 Purpose not found, filesharing disabled")
|
||||
endif()
|
||||
|
||||
# Search MLT package.
|
||||
find_package(MLT ${MLT_MIN_VERSION} REQUIRED)
|
||||
set_package_properties(MLT PROPERTIES
|
||||
@@ -103,20 +118,29 @@ set_package_properties(MLT PROPERTIES
|
||||
TYPE RUNTIME
|
||||
PURPOSE "Required to do video processing")
|
||||
|
||||
if(NOT WIN32)
|
||||
set(MLT_PREFIX ${MLT_ROOT_DIR})
|
||||
else()
|
||||
set(MLT_PREFIX "..")
|
||||
endif()
|
||||
|
||||
add_subdirectory(data)
|
||||
if(KF5DocTools_FOUND)
|
||||
add_subdirectory(doc)
|
||||
endif()
|
||||
#add_subdirectory(plugins)
|
||||
ecm_optional_add_subdirectory(po)
|
||||
add_subdirectory(renderer)
|
||||
add_subdirectory(src)
|
||||
add_subdirectory(thumbnailer)
|
||||
#add_subdirectory(testingArea)
|
||||
ki18n_install(po)
|
||||
if (KF5DocTools_FOUND)
|
||||
kdoctools_install(po)
|
||||
endif()
|
||||
|
||||
|
||||
install( FILES kdenlive.categories DESTINATION ${KDE_INSTALL_CONFDIR} )
|
||||
include(GNUInstallDirs)
|
||||
install( FILES AUTHORS COPYING README DESTINATION ${CMAKE_INSTALL_DOCDIR})
|
||||
|
||||
configure_file(config-kdenlive.h.cmake config-kdenlive.h @ONLY)
|
||||
feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
||||
|
||||
35
README
@@ -1,36 +1,14 @@
|
||||
About Kdenlive
|
||||
==============
|
||||
# About Kdenlive
|
||||
|
||||
Kdenlive is a video editing application,
|
||||
based on MLT Framework and KDE Frameworks 5
|
||||
Kdenlive (https://kdenlive.org) is a Free and Open Source video editing application, based on MLT Framework and KDE Frameworks 5. It is distributed under the GNU General Public Licence Version 2.
|
||||
|
||||
Please check the project page for more information:
|
||||
https://kdenlive.org
|
||||
# Builing from source
|
||||
|
||||
Building from source
|
||||
====================
|
||||
Instructions to build Kdenlive are available on the KDE wiki : https://community.kde.org/Kdenlive/Development
|
||||
|
||||
You will first need to install development headers dependencies
|
||||
from your system (mainly KDE and MLT).
|
||||
# Contributing to Kdenlive
|
||||
|
||||
Then in the directory where you extracted the source archive
|
||||
(with custom /install/path):
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_INSTALL_PREFIX=/install/path
|
||||
make -j4
|
||||
sudo make install
|
||||
|
||||
and then run
|
||||
/install/path/bin/kdenlive
|
||||
|
||||
Alternately, to get kdenlive with an up-to-date multimedia stack
|
||||
(isolated from your system), you can use the build-kdenlive.sh from:
|
||||
https://github.com/mltframework/mlt-scripts/
|
||||
|
||||
Contributing
|
||||
============
|
||||
Please note that Kdenlive's Github repo is just a mirror: see https://community.kde.org/Infrastructure/Github_Mirror for detailed explanations on how to submit patches.
|
||||
|
||||
We welcome all feedback and offers for help!
|
||||
|
||||
@@ -49,4 +27,3 @@ We welcome all feedback and offers for help!
|
||||
we don't test every (any?) other video editor, so give precise explanations
|
||||
* Code! Help fixing bugs, improving usability, optimizing, porting...
|
||||
register on KDE infrastructure, study its guidelines, and pick from roadmap:
|
||||
http://community.kde.org/Kdenlive/Roadmap
|
||||
|
||||
25
cmake/modules/FindDrMinGW.cmake
Normal file
@@ -0,0 +1,25 @@
|
||||
# cmake macro to find DrMinGW Windows crash handler
|
||||
#
|
||||
# copyright (c) 2018, Vincent Pinon <vpinon@kde.org>
|
||||
#
|
||||
# once done this will define:
|
||||
#
|
||||
# DRMINGW_FOUND - system has DrMinGW
|
||||
# DRMINGW_INCLUDE_DIR - the DrMinGW include directory
|
||||
# DRMINGW_LIBRARY - the libraries needed to use DrMinGW
|
||||
#
|
||||
# redistribution and use is allowed according to the terms of the bsd license.
|
||||
|
||||
if (DRMINGW_INCLUDE_DIR AND DRMINGW_LIBRARY)
|
||||
# already in cache, be silent
|
||||
set (DRMINGW_FIND_QUIETLY true)
|
||||
endif (DRMINGW_INCLUDE_DIR AND DRMINGW_LIBRARY)
|
||||
|
||||
find_path (DRMINGW_INCLUDE_DIR exchndl.h)
|
||||
find_library (DRMINGW_LIBRARY exchndl)
|
||||
|
||||
include (FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args (DrMinGW DEFAULT_MSG DRMINGW_INCLUDE_DIR DRMINGW_LIBRARY)
|
||||
|
||||
mark_as_advanced(DRMINGW_INCLUDE_DIR DRMINGW_LIBRARY)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
|
||||
find_package(PkgConfig QUIET)
|
||||
pkg_check_modules(PC_MLT QUIET mlt++)
|
||||
pkg_check_modules(PC_MLT mlt++)
|
||||
|
||||
find_path(MLT_INCLUDE_DIR
|
||||
NAMES framework/mlt.h
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
# Find QJSON - JSON handling library for Qt
|
||||
#
|
||||
# This module defines
|
||||
# QJSON_FOUND - whether the qsjon library was found
|
||||
# QJSON_LIBRARIES - the qjson library
|
||||
# QJSON_INCLUDE_DIR - the include path of the qjson library
|
||||
#
|
||||
# Copyright (c) 2010 Pino Toscano, <toscano.pino@tiscali.it>
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
|
||||
|
||||
|
||||
if (QJSON_INCLUDE_DIR AND QJSON_LIBRARIES)
|
||||
|
||||
# Already in cache
|
||||
set (QJSON_FOUND TRUE)
|
||||
|
||||
else (QJSON_INCLUDE_DIR AND QJSON_LIBRARIES)
|
||||
|
||||
if (NOT WIN32)
|
||||
# use pkg-config to get the values of QJSON_INCLUDE_DIRS
|
||||
# and QJSON_LIBRARY_DIRS to add as hints to the find commands.
|
||||
include (FindPkgConfig)
|
||||
pkg_check_modules (PC_QJSON REQUIRED QJson>=0.5)
|
||||
endif (NOT WIN32)
|
||||
|
||||
find_library (QJSON_LIBRARIES
|
||||
NAMES
|
||||
qjson
|
||||
PATHS
|
||||
${PC_QJSON_LIBRARY_DIRS}
|
||||
${LIB_INSTALL_DIR}
|
||||
${KDE4_LIB_DIR}
|
||||
)
|
||||
|
||||
find_path (QJSON_INCLUDE_DIR
|
||||
NAMES
|
||||
qjson/parser.h
|
||||
PATHS
|
||||
${PC_QJSON_INCLUDE_DIRS}
|
||||
${INCLUDE_INSTALL_DIR}
|
||||
${KDE4_INCLUDE_DIR}
|
||||
)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(QJSON DEFAULT_MSG QJSON_LIBRARIES QJSON_INCLUDE_DIR)
|
||||
|
||||
endif (QJSON_INCLUDE_DIR AND QJSON_LIBRARIES)
|
||||
@@ -26,20 +26,15 @@ install(FILES
|
||||
timeline_vthumbs.png
|
||||
kdenliveeffectscategory.rc
|
||||
kdenlivetranscodingrc
|
||||
# Qml are now embeded as Qt resources from /src/uiresources.qrc
|
||||
# kdenlivemonitor.qml
|
||||
# kdenliveclipmonitor.qml
|
||||
# kdenlivemonitoreffectscene.qml
|
||||
# kdenlivemonitorcornerscene.qml
|
||||
# kdenlivemonitorsplit.qml
|
||||
|
||||
DESTINATION ${DATA_INSTALL_DIR}/kdenlive)
|
||||
install(FILES kdenlive.notifyrc DESTINATION ${KNOTIFYRC_INSTALL_DIR})
|
||||
install(FILES kdenlive_projectprofiles.knsrc kdenlive_renderprofiles.knsrc kdenlive_wipes.knsrc kdenlive_titles.knsrc DESTINATION ${CONFIG_INSTALL_DIR})
|
||||
install(FILES kdenlive_renderprofiles.knsrc kdenlive_wipes.knsrc kdenlive_titles.knsrc DESTINATION ${CONFIG_INSTALL_DIR})
|
||||
install(FILES profiles.xml DESTINATION ${DATA_INSTALL_DIR}/kdenlive/export)
|
||||
install(FILES org.kde.kdenlive.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR})
|
||||
install(FILES org.kde.kdenlive.desktop DESTINATION ${XDG_APPS_INSTALL_DIR})
|
||||
|
||||
find_package(SharedMimeInfo REQUIRED)
|
||||
install(FILES kdenlive.xml westley.xml DESTINATION ${XDG_MIME_INSTALL_DIR})
|
||||
install(FILES org.kde.kdenlive.xml westley.xml DESTINATION ${XDG_MIME_INSTALL_DIR})
|
||||
update_xdg_mimetypes(${XDG_MIME_INSTALL_DIR})
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
function get_files
|
||||
{
|
||||
echo kdenlive.xml
|
||||
echo org.kde.kdenlive.xml
|
||||
}
|
||||
|
||||
function po_for_file
|
||||
{
|
||||
case "$1" in
|
||||
kdenlive.xml)
|
||||
org.kde.kdenlive.xml)
|
||||
echo kdenlive_xml_mimetypes.po
|
||||
;;
|
||||
esac
|
||||
@@ -15,7 +15,7 @@ function po_for_file
|
||||
function tags_for_file
|
||||
{
|
||||
case "$1" in
|
||||
kdenlive.xml)
|
||||
org.kde.kdenlive.xml)
|
||||
echo comment
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -99,7 +99,7 @@ The rest:
|
||||
- works with MLT filters that use mlt_geometry for keyframe support (includes all frei0r filters)
|
||||
- same attributes as "keyframe"
|
||||
- "geometry":
|
||||
- a rectangle: postion + dimension + additional value
|
||||
- a rectangle: position + dimension + additional value
|
||||
- works with MLT filters using mlt_geometry
|
||||
- the rect can be edited on the project monitor
|
||||
- additional attributes:
|
||||
@@ -110,7 +110,7 @@ The rest:
|
||||
- url/path
|
||||
- represented by button to open "file open" dialog
|
||||
- additional attributes:
|
||||
- "filter": Filter for file extensions. Example : "*.cpp *.cc *.C|C++ Source Files\n*.h *.H|Header files" or as using mimetype: "image/png text/html"
|
||||
- "filter": Filter for file extensions. Example : "*.cpp *.cc *.C|C++ Source Files\n*.h *.H|Header files" or as using MIME type: "image/png text/html"
|
||||
- "wipe":
|
||||
- special GUI for the wipe transition makes it possible to select a direction of a slide
|
||||
- "addedgeometry":
|
||||
|
||||
@@ -61,8 +61,8 @@
|
||||
<name>Curves</name>
|
||||
<description>Color curves adjustment</description>
|
||||
<author>Maksim Golovkin</author>
|
||||
<parameter type="list" name="Channel" default="0" paramlist="0;1;2;3">
|
||||
<paramlistdisplay>Red,Green,Blue,Luma</paramlistdisplay>
|
||||
<parameter type="list" name="Channel" default="0.5" paramlist="0.5;0;0.1;0.2;0.3;0.4;0.6;0.71">
|
||||
<paramlistdisplay>RGB,Red,Green,Blue,Alpha,Luma,Hue,Saturation</paramlistdisplay>
|
||||
<name>Channel</name>
|
||||
</parameter>
|
||||
<parameter type="list" name="Luma formula" default="1" paramlist="0;1">
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE kpartgui>
|
||||
<group>
|
||||
<effect tag="qtblend" id="qtblend">
|
||||
<name>Transform</name>
|
||||
<description>Position, scale and opacity.</description>
|
||||
@@ -17,5 +18,27 @@
|
||||
<name>Distort</name>
|
||||
</parameter>
|
||||
</effect>
|
||||
<effect tag="qtblend" id="qtblend" version="2">
|
||||
<name>Transform</name>
|
||||
<description>Position, scale and opacity.</description>
|
||||
<author>Jean-Baptiste Mardelle</author>
|
||||
<parameter type="animatedrect" name="rect" default="0 0 %width %height 1">
|
||||
<name>Rectangle</name>
|
||||
</parameter>
|
||||
<parameter type="animated" name="rotation" max="360" min="-360" default="0" notintimeline="1">
|
||||
<name>Rotation</name>
|
||||
</parameter>
|
||||
<parameter type="list" name="compositing" default="0" paramlist="0;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;6;8">
|
||||
<paramlistdisplay>Alpha blend,Xor,Plus,Multiply,Screen,Overlay,Darken,Lighten,Color dodge,Color burn,Hard light,Soft light,Difference,Exclusion,Bitwise or,Bitwise and,Bitwise xor,Bitwise nor,Bitwise nand,Bitwise not xor,Destination in,Destination out</paramlistdisplay>
|
||||
<name>Compositing</name>
|
||||
</parameter>
|
||||
<parameter type="bool" name="distort" default="0" min="0" max="1">
|
||||
<name>Distort</name>
|
||||
</parameter>
|
||||
<parameter type="bool" name="rotate_center" default="1" min="0" max="1">
|
||||
<name>Rotate from center</name>
|
||||
</parameter>
|
||||
</effect>
|
||||
</group>
|
||||
|
||||
|
||||
|
||||
@@ -4,8 +4,9 @@ DNxHD=vcodec=dnxhd vb=145000k acodec=pcm_s16le threads=%threads;mov
|
||||
MPEG=qscale=4 ab=192k vcodec=mpeg2video acodec=mp2 threads=%threads;mpg
|
||||
|
||||
[proxy]
|
||||
x264=-vf scale=640:-1 -g 5 -crf 25 -ab 128k -vcodec libx264 -acodec libvorbis -preset veryfast;mov
|
||||
MPEG=-vf scale=640:-1 -g 5 -qscale 6 -ab 128k -vcodec mpeg2video -acodec mp2;mpg
|
||||
x264=-vf scale=960:-2 -g 1 -bf 0 -vb 0 -crf 20 -vcodec libx264 -ab 128k -acodec aac -preset veryfast;mov
|
||||
MPEG2=-vf scale=960:-2 -g 1 -bf 0 -vb 0 -qscale 6 -ab 128k -vcodec mpeg2video -acodec ac3;mpg
|
||||
MJPEG=-vf yadif,scale=960:-2 -qscale 3 -vcodec mjpeg -acodec pcm_s16le;mkv
|
||||
|
||||
[screengrab]
|
||||
X264 mute=-crf 25 -vcodec libx264 -preset veryfast -threads 0;mov
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[Global]
|
||||
IconName=kdenlive
|
||||
Comment=Kdenlive
|
||||
Comment[ast]=Kdenlive
|
||||
Comment[ar]=كدينلايڤ
|
||||
Comment[bs]=Kdenlive
|
||||
Comment[ca]=Kdenlive
|
||||
Comment[ca@valencia]=Kdenlive
|
||||
@@ -12,6 +12,7 @@ Comment[el]=Kdenlive
|
||||
Comment[en_GB]=Kdenlive
|
||||
Comment[es]=Kdenlive
|
||||
Comment[et]=Kdenlive
|
||||
Comment[eu]=Kdenlive
|
||||
Comment[fi]=Kdenlive
|
||||
Comment[fr]=Kdenlive
|
||||
Comment[ga]=Kdenlive
|
||||
@@ -20,6 +21,7 @@ Comment[hu]=Kdenlive
|
||||
Comment[it]=Kdenlive
|
||||
Comment[ja]=Kdenlive
|
||||
Comment[km]=Kdenlive
|
||||
Comment[ko]=Kdenlive
|
||||
Comment[lt]=Kdenlive
|
||||
Comment[lv]=Kdenlive
|
||||
Comment[mr]=के-डि-एनलाइव्ह
|
||||
@@ -45,7 +47,6 @@ Comment[zh_TW]=Kdenlive
|
||||
[Event/RenderFinished]
|
||||
Name=Rendering finished
|
||||
Name[ar]=انتهى التّصيير
|
||||
Name[ast]=Finó'l renderizáu
|
||||
Name[bs]=Iscrtavanje završeno
|
||||
Name[ca]=Ha acabat la renderització
|
||||
Name[ca@valencia]=Ha acabat la renderització
|
||||
@@ -56,13 +57,15 @@ Name[el]=Η αποτύπωση ολοκληρώθηκε
|
||||
Name[en_GB]=Rendering finished
|
||||
Name[es]=Procesamiento finalizado
|
||||
Name[et]=Renderdamine on valmis
|
||||
Name[eu]=Errendatzea amaitu da
|
||||
Name[fi]=Renderöinti valmistui
|
||||
Name[fr]=Rendu terminé
|
||||
Name[gl]=Renderizado finalizado
|
||||
Name[gl]=Rematou a renderización
|
||||
Name[hu]=A renderelés befejeződött
|
||||
Name[it]=Esportazione terminata
|
||||
Name[ja]=レンダリングが完了しました
|
||||
Name[km]=បានបញ្ចប់ការបង្ហាញ
|
||||
Name[ko]=렌더링 완료됨
|
||||
Name[lt]=Atvaizdavimas baigtas
|
||||
Name[lv]=Renderēšana pabeigta
|
||||
Name[mr]=रेंडरींग पूर्ण झाले
|
||||
@@ -73,6 +76,7 @@ Name[pl]=Ukończono renderowanie
|
||||
Name[pt]=A geração terminou
|
||||
Name[pt_BR]=A renderização terminou
|
||||
Name[ro]=Randare încheiată
|
||||
Name[ru]=Рендеринг завершён
|
||||
Name[sk]=Renderovanie ukončené
|
||||
Name[sl]=Izrisovanje končano
|
||||
Name[sv]=Återgivning klar
|
||||
@@ -83,34 +87,36 @@ Name[zh_CN]=渲染结束
|
||||
Name[zh_TW]=已完成導出
|
||||
Comment=Rendering is over
|
||||
Comment[ar]=قد انتهى التّصيير
|
||||
Comment[ast]=Acabóse'l renderizáu
|
||||
Comment[bs]=Iscrtavanje je gotovo
|
||||
Comment[ca]=La renderització ja ha acabat
|
||||
Comment[ca@valencia]=La renderització ja ha acabat
|
||||
Comment[cs]=Renderování je hotové
|
||||
Comment[cs]=Renderování je u konce
|
||||
Comment[da]=Renderingen er slut
|
||||
Comment[de]=Das Rendern ist beendet
|
||||
Comment[el]=Η αποτύπωση τελείωσε
|
||||
Comment[en_GB]=Rendering is over
|
||||
Comment[es]=El procesamiento ha finalizado
|
||||
Comment[et]=Renderdamine on valmis
|
||||
Comment[eu]=Errendatzea bukatu da
|
||||
Comment[fi]=Renderöinti on tehty
|
||||
Comment[fr]=Le rendu est terminé
|
||||
Comment[gl]=Rematou o renderizado
|
||||
Comment[gl]=Rematou a renderización
|
||||
Comment[hu]=A renderelésnek vége
|
||||
Comment[it]=L'esportazione è terminata
|
||||
Comment[ja]=レンダリングが終了しました
|
||||
Comment[km]=ការបង្ហាញបានចប់
|
||||
Comment[ko]=렌더링이 끝났음
|
||||
Comment[lt]=Atvaizdavimas baigtas
|
||||
Comment[lv]=Renderēšana ir beigusies
|
||||
Comment[mr]=रेंडरींग पूर्ण झाले आहे
|
||||
Comment[nb]=Ferdig med opptegning
|
||||
Comment[nl]=Weergave uitwerken is gereed
|
||||
Comment[nn]=Videorendering er ferdig
|
||||
Comment[pl]=Ukończono zostało zakończone
|
||||
Comment[pl]=Renderowanie zostało zakończone
|
||||
Comment[pt]=A geração terminou
|
||||
Comment[pt_BR]=A renderização foi terminada
|
||||
Comment[ro]=Randarea s-a încheiat
|
||||
Comment[ru]=Рендеринг завершён
|
||||
Comment[sk]=Renderovanie je skončené
|
||||
Comment[sl]=Izrisovanje je končano
|
||||
Comment[sv]=Återgivningen är gjord
|
||||
@@ -124,7 +130,6 @@ Action=Popup
|
||||
[Event/RenderStarted]
|
||||
Name=Rendering started
|
||||
Name[ar]=بدأ التّصيير
|
||||
Name[ast]=Entamó'l renderizáu
|
||||
Name[bs]=Iscrtavanje započelo
|
||||
Name[ca]=Ha començat la renderització
|
||||
Name[ca@valencia]=Ha començat la renderització
|
||||
@@ -135,13 +140,15 @@ Name[el]=Η αποτύπωση ξεκίνησε
|
||||
Name[en_GB]=Rendering started
|
||||
Name[es]=Procesamiento inciado
|
||||
Name[et]=Renderdamist on alustatud
|
||||
Name[eu]=Errendatzea hasi da
|
||||
Name[fi]=Renderöinti aloitettu
|
||||
Name[fr]=Rendu démarré
|
||||
Name[gl]=Iniciado o renderizado
|
||||
Name[gl]=Comezou a renderización
|
||||
Name[hu]=A renderelés elkezdődött
|
||||
Name[it]=Esportazione avviata
|
||||
Name[ja]=レンダリングを開始しました
|
||||
Name[km]=ការបង្ហាញបានចាប់ផ្ដើម
|
||||
Name[ko]=렌더링 시작됨
|
||||
Name[lt]=Atvaizdavimas pradėtas
|
||||
Name[lv]=Renderēšana sākta
|
||||
Name[mr]=रेंडरींग सुरु झाले
|
||||
@@ -152,6 +159,7 @@ Name[pl]=Rozpoczęto renderowanie
|
||||
Name[pt]=A geração foi iniciada
|
||||
Name[pt_BR]=A renderização iniciou
|
||||
Name[ro]=Randarea începută
|
||||
Name[ru]=Рендеринг запущен
|
||||
Name[sk]=Renderovanie spustené
|
||||
Name[sl]=Izrisovanje začeto
|
||||
Name[sv]=Återgivning startad
|
||||
@@ -162,24 +170,25 @@ Name[zh_CN]=渲染开始
|
||||
Name[zh_TW]=導出已開始
|
||||
Comment=Rendering was started
|
||||
Comment[ar]=قد بدأ التّصيير
|
||||
Comment[ast]=Anicióse'l rederizáu
|
||||
Comment[bs]=Iscrtavanje je započelo
|
||||
Comment[ca]=La renderització ja ha començat
|
||||
Comment[ca@valencia]=La renderització ja ha començat
|
||||
Comment[cs]=Renderování bylo začato
|
||||
Comment[cs]=Vykreslování bylo zahájeno
|
||||
Comment[da]=Renderingen blev startet
|
||||
Comment[de]=Das Rendern wurde gestartet
|
||||
Comment[el]=Η αποτύπωση ξεκίνησε
|
||||
Comment[en_GB]=Rendering was started
|
||||
Comment[es]=El procesamiento ha sido iniciado
|
||||
Comment[et]=Renderdamist on alustatud
|
||||
Comment[eu]=Errendatzea abiarazia izan da
|
||||
Comment[fi]=Renderöinti aloitettiin
|
||||
Comment[fr]=Le rendu a démarré
|
||||
Comment[gl]=Vaise iniciar o renderizado
|
||||
Comment[gl]=Comezou a renderización
|
||||
Comment[hu]=A renderelés elkezdődött
|
||||
Comment[it]=L'esportazione è stata avviata
|
||||
Comment[ja]=レンダリングを開始しました
|
||||
Comment[km]=ការបង្ហាញត្រូវបានចាប់ផ្ដើម
|
||||
Comment[ko]=렌더링이 시작됨
|
||||
Comment[lt]=Atvaizdavimas buvo pradėtas
|
||||
Comment[lv]=Renderēšana tika palaista
|
||||
Comment[mr]=रेंडरींग सुरु झाले होते
|
||||
@@ -190,6 +199,7 @@ Comment[pl]=Renderowanie zostało rozpoczęte
|
||||
Comment[pt]=A geração foi iniciada
|
||||
Comment[pt_BR]=A renderização foi iniciada
|
||||
Comment[ro]=Randarea a început
|
||||
Comment[ru]=Рендеринг запущен
|
||||
Comment[sk]=Renderovanie bolo spustené
|
||||
Comment[sl]=Izrisovanje se je začelo
|
||||
Comment[sv]=Återgivningen har startats
|
||||
@@ -207,12 +217,13 @@ Name[bs]=Kadar uhvaćen
|
||||
Name[ca]=S'ha capturat un fotograma
|
||||
Name[ca@valencia]=S'ha capturat un fotograma
|
||||
Name[cs]=Snímek zachycen
|
||||
Name[da]=Billed indfanget
|
||||
Name[da]=Billede indfanget
|
||||
Name[de]=Bild aufgenommen
|
||||
Name[el]=Σύλληψη πλαισίου
|
||||
Name[en_GB]=Frame captured
|
||||
Name[es]=Fotograma capturado
|
||||
Name[et]=Kaader on salvestatud
|
||||
Name[eu]=Bilbe atzematea
|
||||
Name[fi]=Ruutu kaapattu
|
||||
Name[fr]=Cadre capturé
|
||||
Name[gl]=Fotograma capturado
|
||||
@@ -220,6 +231,7 @@ Name[hu]=Képkocka rögzítve
|
||||
Name[it]=Fotogramma acquisito
|
||||
Name[ja]=フレームをキャプチャしました
|
||||
Name[km]=បានចាប់យកស៊ុម
|
||||
Name[ko]=프레임 캡처됨
|
||||
Name[lt]=Kadras išsaugotas
|
||||
Name[lv]=Kadrs notverts
|
||||
Name[mr]=फ्रेम पकडली
|
||||
@@ -230,6 +242,7 @@ Name[pl]=Przechwycono klatkę
|
||||
Name[pt]=Imagem capturada
|
||||
Name[pt_BR]=Imagem capturada
|
||||
Name[ro]=Cadru captat
|
||||
Name[ru]=Кадр получен
|
||||
Name[sk]=Snímka zachytená
|
||||
Name[sl]=Sličica zajeta
|
||||
Name[sv]=Ram lagrad
|
||||
@@ -244,12 +257,13 @@ Comment[bs]=Kadar je uhvaćen na disk
|
||||
Comment[ca]=S'ha capturat i desat un fotograma al disc
|
||||
Comment[ca@valencia]=S'ha capturat i guardat un fotograma al disc
|
||||
Comment[cs]=Snímek byl zachycen na disk
|
||||
Comment[da]=Et billed blev indfanget til disken
|
||||
Comment[da]=Et billede blev indfanget til disken
|
||||
Comment[de]=Ein Bild wurde aufgenommen und auf die Festplatte gespeichert
|
||||
Comment[el]=Έγινε σύλληψη πλαισίου στο δίσκο
|
||||
Comment[en_GB]=A frame was captured to disk
|
||||
Comment[es]=Un fotograma fue capturado al disco
|
||||
Comment[et]=Kaader on kettale salvestatud
|
||||
Comment[eu]=Bilbe bat atzeman da diskora
|
||||
Comment[fi]=Ruutu kaapattiin levylle
|
||||
Comment[fr]=Un cadre a été capturé sur le disque
|
||||
Comment[gl]=Capturouse un fotograma para o disco
|
||||
@@ -257,6 +271,7 @@ Comment[hu]=Egy képkocka rögzítésre került a lemezre
|
||||
Comment[it]=È stato acquisito un fotogramma sul disco
|
||||
Comment[ja]=フレームをディスクにキャプチャしました
|
||||
Comment[km]=ស៊ុមត្រូវបានចាប់យកទៅកាន់ថាស
|
||||
Comment[ko]=프레임이 디스크에 캡처됨
|
||||
Comment[lt]=Kadras buvo išsaugotas į diską
|
||||
Comment[lv]=Kadrs tika notverts diskā
|
||||
Comment[mr]=फ्रेम डिस्कवर पकडली
|
||||
@@ -267,6 +282,7 @@ Comment[pl]=Klatka została przechwycona na dysk
|
||||
Comment[pt]=Foi capturada uma imagem para o disco
|
||||
Comment[pt_BR]=Foi capturada uma imagem para o disco
|
||||
Comment[ro]=Un cadru a fost captat pe disc
|
||||
Comment[ru]=Выполнен захват кадра с сохранением на диск
|
||||
Comment[sk]=Snímka bola uložená na disk
|
||||
Comment[sl]=Sličica je bila zajeta na disk
|
||||
Comment[sv]=En ram har lagrats på disk
|
||||
@@ -291,6 +307,7 @@ Name[el]=Έτοιμο για σύλληψη
|
||||
Name[en_GB]=Ready to capture
|
||||
Name[es]=Listo para capturar
|
||||
Name[et]=Salvestamiseks valmis
|
||||
Name[eu]=Atzemateko prest
|
||||
Name[fi]=Valmiina kaappaamaan
|
||||
Name[fr]=Prêt pour la capture
|
||||
Name[gl]=Listo para a captura
|
||||
@@ -298,6 +315,7 @@ Name[hu]=Kezdődhet a rögzítés
|
||||
Name[it]=Pronto per la registrazione
|
||||
Name[ja]=キャプチャ準備完了
|
||||
Name[km]=រួចរាល់ដើម្បីចាប់យក
|
||||
Name[ko]=캡처 준비
|
||||
Name[lt]=Pasiruošęs išsaugoti
|
||||
Name[lv]=Gatavs notveršanai
|
||||
Name[mr]=पकडण्याकरिता तयार
|
||||
@@ -308,6 +326,7 @@ Name[pl]=Gotowy do przechwycenia
|
||||
Name[pt]=Pronto para capturar
|
||||
Name[pt_BR]=Pronto para capturar
|
||||
Name[ro]=Gata de captare
|
||||
Name[ru]=Готов к захвату
|
||||
Name[sk]=Pripravené na zachytenie
|
||||
Name[sl]=Pripravljen na zajem
|
||||
Name[sv]=Klar att lagra
|
||||
@@ -322,7 +341,6 @@ Action=Sound
|
||||
[Event/ErrorMessage]
|
||||
Name=Error
|
||||
Name[ar]=خطأ
|
||||
Name[ast]=Fallu
|
||||
Name[bs]=Greška
|
||||
Name[ca]=Error
|
||||
Name[ca@valencia]=Error
|
||||
@@ -333,6 +351,7 @@ Name[el]=Σφάλμα
|
||||
Name[en_GB]=Error
|
||||
Name[es]=Error
|
||||
Name[et]=Tõrge
|
||||
Name[eu]=Errorea
|
||||
Name[fi]=Virhe
|
||||
Name[fr]=Erreur
|
||||
Name[ga]=Earráid
|
||||
@@ -341,6 +360,7 @@ Name[hu]=Hiba
|
||||
Name[it]=Errore
|
||||
Name[ja]=エラー
|
||||
Name[km]=កំហុស
|
||||
Name[ko]=오류
|
||||
Name[lt]=Klaida
|
||||
Name[lv]=Kļūda
|
||||
Name[mr]=त्रुटी
|
||||
@@ -363,25 +383,27 @@ Name[x-test]=xxErrorxx
|
||||
Name[zh_CN]=错误
|
||||
Name[zh_TW]=錯誤
|
||||
Comment=An error occurred in Kdenlive
|
||||
Comment[ast]=Asocedió un fallu en Kdenlive
|
||||
Comment[ar]=حدث خطأ في «كدينلايڤ»
|
||||
Comment[bs]=Desila se greška u KDenlive
|
||||
Comment[ca]=S'ha produït un error al Kdenlive
|
||||
Comment[ca@valencia]=S'ha produït un error al Kdenlive
|
||||
Comment[cs]=V Kdenlive došlo k chybě
|
||||
Comment[da]=En fejl opstod i Kdenlive
|
||||
Comment[da]=Der opstod en fejl i Kdenlive
|
||||
Comment[de]=In Kdenlive ist ein Fehler aufgetreten
|
||||
Comment[el]=Εμφανίστηκε σφάλμα στο Kdenlive
|
||||
Comment[en_GB]=An error occurred in Kdenlive
|
||||
Comment[es]=Ha ocurrido un error en Kdenlive
|
||||
Comment[et]=Kdenlive'is tekkis tõrge
|
||||
Comment[eu]=Errore bat gertatu da Kdenliven
|
||||
Comment[fi]=Kdenlivessä ilmeni virhe
|
||||
Comment[fr]=Une erreur est survenue dans Kdenlive
|
||||
Comment[ga]=Tharla earráid in Kdenlive
|
||||
Comment[gl]=Aconteceu un erro en Kdenlive
|
||||
Comment[gl]=Ocorreu un erro en Kdenlive
|
||||
Comment[hu]=Hiba történt a Kdenlive-ban
|
||||
Comment[it]=Si è verificato un errore in Kdenlive
|
||||
Comment[ja]=Kdenlive 内でエラーが発生
|
||||
Comment[km]=មានកំហុសបានកើតឡើងនៅក្នុង Kdenlive
|
||||
Comment[ko]=Kdenlive에서 오류가 발생함
|
||||
Comment[lt]=Įvyko Kdenlive klaida
|
||||
Comment[lv]=Programmā Kdenlive radās kļūda
|
||||
Comment[mr]=के-डि-एनलाइव्ह मध्ये त्रुटी निर्माण झाली
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
[KNewStuff2]
|
||||
ProvidersUrl=https://kdenlive.org/data/mltprofilesources.xml
|
||||
TargetDir=kdenlive/profiles
|
||||
Uncompress=archive
|
||||
|
||||
[KNewStuff3]
|
||||
ProvidersUrl=https://kdenlive.org/data/mltprofilesources.xml
|
||||
TargetDir=kdenlive/profiles
|
||||
Uncompress=archive
|
||||
|
||||
@@ -1,10 +1,35 @@
|
||||
[KNewStuff2]
|
||||
ProvidersUrl=https://kdenlive.org/data/rendersources.xml
|
||||
TargetDir=kdenlive/export
|
||||
Uncompress=archive
|
||||
|
||||
[KNewStuff3]
|
||||
Name=Kdenlive Render Profiles
|
||||
Name[ar]=لاحات «كدينلايڤ» للتّصيير
|
||||
Name[ca]=Perfils de renderització del Kdenlive
|
||||
Name[ca@valencia]=Perfils de renderització del Kdenlive
|
||||
Name[cs]=Profily renderování Kdenlive
|
||||
Name[da]=Kdenlive-renderingsprofiler
|
||||
Name[de]=Kdenlive-Render-Profile
|
||||
Name[el]=Προφίλ αποτύπωσης του Kdenlive
|
||||
Name[en_GB]=Kdenlive Render Profiles
|
||||
Name[es]=Perfiles de procesamiento de Kdenlive
|
||||
Name[eu]=Kdenlive errendatze profilak
|
||||
Name[fi]=Kdenliven hahmonnusprofiilit
|
||||
Name[fr]=Profils de rendu Kdenlive
|
||||
Name[gl]=Perfís de renderización de Kdenlive
|
||||
Name[it]=Profilo di resa di Kdenlive
|
||||
Name[ko]=Kdenlive 렌더 속성
|
||||
Name[nl]=Renderprofielen van Kdenlive
|
||||
Name[nn]=Render-profilar for Kdenlive
|
||||
Name[pl]=Profile renderowania Kdenlive
|
||||
Name[pt]=Perfis de Visualização do Kdenlive
|
||||
Name[pt_BR]=Perfis de visualização do Kdenlive
|
||||
Name[ru]=Профили рендеринга Kdenlive
|
||||
Name[sk]=Vykresľovacie profily Kdenline
|
||||
Name[sl]=Izrisovalni profili za Kdenlive
|
||||
Name[sv]=Kdenlive-återgivningsprofiler
|
||||
Name[tr]=Kdenlive İşleme Profilleri
|
||||
Name[uk]=Профілі обробки Kdenlive
|
||||
Name[x-test]=xxKdenlive Render Profilesxx
|
||||
Name[zh_CN]=Kdenlive 渲染配置文件
|
||||
Name[zh_TW]=Kdenlive 繪製設定檔
|
||||
ProvidersUrl=http://download.kde.org/ocs/providers.xml
|
||||
Categories=Kdenlive Profile
|
||||
Categories=Kdenlive Export Profiles
|
||||
TargetDir=kdenlive/export
|
||||
Uncompress=archive
|
||||
|
||||
@@ -1,10 +1,35 @@
|
||||
[KNewStuff2]
|
||||
ProvidersUrl=https://kdenlive.org/data/titletemplates.xml
|
||||
TargetDir=kdenlive/titles
|
||||
Uncompress=archive
|
||||
|
||||
[KNewStuff3]
|
||||
Name=Kdenlive Title Templates
|
||||
Name[ar]=قوالب «كدينلايڤ» للعناوين
|
||||
Name[ca]=Plantilles de títol del Kdenlive
|
||||
Name[ca@valencia]=Plantilles de títol del Kdenlive
|
||||
Name[cs]=Šablony titulků Kdenlive
|
||||
Name[da]=Kdenlive-titelskabeloner
|
||||
Name[de]=Kdenlive-Titelvorlagen
|
||||
Name[el]=Πρότυπα τίτλων του Kdenlive
|
||||
Name[en_GB]=Kdenlive Title Templates
|
||||
Name[es]=Plantillas de título de Kdenlive
|
||||
Name[eu]=Kdenlive titulu txantiloiak
|
||||
Name[fi]=Kdenliven otsikkopohjat
|
||||
Name[fr]=Modèles de titre Kdenlive
|
||||
Name[gl]=Modelos de título de Kdenlive
|
||||
Name[it]=Modelli di titolo di Kdenlive
|
||||
Name[ko]=Kdenlive 타이틀 속성
|
||||
Name[nl]=Titelsjablonen van Kdenlive
|
||||
Name[nn]=Tittelmalar for Kdenlive
|
||||
Name[pl]=Szablony tytułów Kdenlive
|
||||
Name[pt]=Perfis de Títulos do Kdenlive
|
||||
Name[pt_BR]=Modelos de títulos do Kdenlive
|
||||
Name[ru]=Шаблоны титров Kdenlive
|
||||
Name[sk]=Šablóny dlaždíc Kdenlive
|
||||
Name[sl]=Predloge naslovov za Kdenlive
|
||||
Name[sv]=Kdenlive-titelmallar
|
||||
Name[tr]=Kdenlive Başlık Şablonları
|
||||
Name[uk]=Шаблони титрів Kdenlive
|
||||
Name[x-test]=xxKdenlive Title Templatesxx
|
||||
Name[zh_CN]=Kdenlive 标题模板
|
||||
Name[zh_TW]=Kdenlive 標題範本
|
||||
ProvidersUrl=http://download.kde.org/ocs/providers.xml
|
||||
Categories=Kdenlive Template
|
||||
Categories=Kdenlive Title Templates
|
||||
TargetDir=kdenlive/titles
|
||||
Uncompress=archive
|
||||
|
||||
@@ -1,10 +1,35 @@
|
||||
[KNewStuff2]
|
||||
ProvidersUrl=http://download.kde.org/khotnewstuff/kdenlive-providers.xml
|
||||
TargetDir=kdenlive/lumas
|
||||
Uncompress=archive
|
||||
|
||||
[KNewStuff3]
|
||||
Name=Kdenlive Transition Wipes
|
||||
Name[ar]=أشرطة «كدينلايڤ» الانتقاليّة
|
||||
Name[ca]=Cortinetes de transició del Kdenlive
|
||||
Name[ca@valencia]=Cortinetes de transició del Kdenlive
|
||||
Name[cs]=Přechod stírání Kdenlive
|
||||
Name[da]=Kdenlive-overgangswipes
|
||||
Name[de]=Kdenlive-Übergangs-Wipes
|
||||
Name[el]=Μετάβαση με σκούπισμα στο Kdenlive
|
||||
Name[en_GB]=Kdenlive Transition Wipes
|
||||
Name[es]=Barridos de transición de Kdenlive
|
||||
Name[eu]=Kdenlive trantsizio gortinak
|
||||
Name[fi]=Kdenliven siirtymäpyyhkäisyt
|
||||
Name[fr]=Transitions par balayage de Kdenlive
|
||||
Name[gl]=Borrados de transición de Kdenlive
|
||||
Name[it]=Tendine di transizione di Kdenlive
|
||||
Name[ko]=Kdenlive 트랜지션 전환
|
||||
Name[nl]=Overgangsvegen van Kdenlive
|
||||
Name[nn]=Overgangseffektar for Kdenlive
|
||||
Name[pl]=Przejścia Kdenlive
|
||||
Name[pt]=Varrimentos de Transição do Kdenlive
|
||||
Name[pt_BR]=Limpeza de transição do Kdenlive
|
||||
Name[ru]=Эффекты смены кадров Kdenlive
|
||||
Name[sk]=Zahladenia prechodov Kdenlive
|
||||
Name[sl]=Obrisi prehodov za Kdenlive
|
||||
Name[sv]=Kdenlive-övergångar
|
||||
Name[tr]=Kdenlive Geçiş Ekranları
|
||||
Name[uk]=Перехідні витирання Kdenlive
|
||||
Name[x-test]=xxKdenlive Transition Wipesxx
|
||||
Name[zh_CN]=Kdenlive 过渡擦除
|
||||
Name[zh_TW]=Kdenlive 過渡 Wipes
|
||||
ProvidersUrl=http://download.kde.org/ocs/providers.xml
|
||||
Categories=Kdenlive FX
|
||||
TargetDir=kdenlive/lumas
|
||||
TargetDir=kdenlive/lumas/HD
|
||||
Uncompress=archive
|
||||
|
||||
@@ -30,14 +30,6 @@ Item {
|
||||
signal editCurrentMarker()
|
||||
signal toolBarChanged(bool doAccept)
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
acceptedButtons: Qt.MidButton
|
||||
onClicked: {
|
||||
root.showToolbar = !root.showToolbar
|
||||
toolBarChanged(root.showToolbar)
|
||||
}
|
||||
}
|
||||
SceneToolBar {
|
||||
id: sceneToolBar
|
||||
anchors {
|
||||
@@ -56,12 +48,12 @@ Item {
|
||||
height: root.profile.y * root.scaley
|
||||
anchors.centerIn: parent
|
||||
visible: root.showSafezone
|
||||
|
||||
property color overlayColor: 'cyan'
|
||||
Rectangle {
|
||||
id: safezone
|
||||
objectName: "safezone"
|
||||
color: "transparent"
|
||||
border.color: "cyan"
|
||||
border.color: frame.overlayColor
|
||||
width: parent.width * 0.9
|
||||
height: parent.height * 0.9
|
||||
anchors.centerIn: parent
|
||||
@@ -69,11 +61,51 @@ Item {
|
||||
id: safetext
|
||||
objectName: "safetext"
|
||||
color: "transparent"
|
||||
border.color: "cyan"
|
||||
border.color: frame.overlayColor
|
||||
width: frame.width * 0.8
|
||||
height: frame.height * 0.8
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
Rectangle {
|
||||
color: frame.overlayColor
|
||||
width: frame.width / 20
|
||||
height: 1
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
Rectangle {
|
||||
color: frame.overlayColor
|
||||
height: frame.width / 20
|
||||
width: 1
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
Rectangle {
|
||||
color: frame.overlayColor
|
||||
height: frame.height / 11
|
||||
width: 1
|
||||
y: 0
|
||||
x: parent.width / 2
|
||||
}
|
||||
Rectangle {
|
||||
color: frame.overlayColor
|
||||
height: frame.height / 11
|
||||
width: 1
|
||||
y: parent.height -height
|
||||
x: parent.width / 2
|
||||
}
|
||||
Rectangle {
|
||||
color: frame.overlayColor
|
||||
width: frame.width / 11
|
||||
height: 1
|
||||
y: parent.height / 2
|
||||
x: 0
|
||||
}
|
||||
Rectangle {
|
||||
color: frame.overlayColor
|
||||
width: frame.width / 11
|
||||
height: 1
|
||||
y: parent.height / 2
|
||||
x: parent.width -width
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -29,14 +29,6 @@ Item {
|
||||
signal editCurrentMarker()
|
||||
signal toolBarChanged(bool doAccept)
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
acceptedButtons: Qt.MidButton
|
||||
onClicked: {
|
||||
root.showToolbar = !root.showToolbar
|
||||
toolBarChanged(root.showToolbar)
|
||||
}
|
||||
}
|
||||
SceneToolBar {
|
||||
id: sceneToolBar
|
||||
anchors {
|
||||
@@ -55,11 +47,12 @@ Item {
|
||||
height: root.profile.y * root.scaley
|
||||
anchors.centerIn: parent
|
||||
visible: root.showSafezone
|
||||
property color overlayColor: 'cyan'
|
||||
Rectangle {
|
||||
id: safezone
|
||||
objectName: "safezone"
|
||||
color: "transparent"
|
||||
border.color: "cyan"
|
||||
border.color: frame.overlayColor
|
||||
width: parent.width * 0.9
|
||||
height: parent.height * 0.9
|
||||
anchors.centerIn: parent
|
||||
@@ -67,11 +60,51 @@ Item {
|
||||
id: safetext
|
||||
objectName: "safetext"
|
||||
color: "transparent"
|
||||
border.color: "cyan"
|
||||
border.color: frame.overlayColor
|
||||
width: frame.width * 0.8
|
||||
height: frame.height * 0.8
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
Rectangle {
|
||||
color: frame.overlayColor
|
||||
width: frame.width / 20
|
||||
height: 1
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
Rectangle {
|
||||
color: frame.overlayColor
|
||||
height: frame.width / 20
|
||||
width: 1
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
Rectangle {
|
||||
color: frame.overlayColor
|
||||
height: frame.height / 11
|
||||
width: 1
|
||||
y: 0
|
||||
x: parent.width / 2
|
||||
}
|
||||
Rectangle {
|
||||
color: frame.overlayColor
|
||||
height: frame.height / 11
|
||||
width: 1
|
||||
y: parent.height -height
|
||||
x: parent.width / 2
|
||||
}
|
||||
Rectangle {
|
||||
color: frame.overlayColor
|
||||
width: frame.width / 11
|
||||
height: 1
|
||||
y: parent.height / 2
|
||||
x: 0
|
||||
}
|
||||
Rectangle {
|
||||
color: frame.overlayColor
|
||||
width: frame.width / 11
|
||||
height: 1
|
||||
y: parent.height / 2
|
||||
x: parent.width -width
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -159,13 +159,6 @@ Item {
|
||||
root.addKeyframe()
|
||||
}
|
||||
|
||||
onClicked: {
|
||||
if (mouse.button & Qt.MidButton) {
|
||||
root.showToolbar = !root.showToolbar
|
||||
toolBarChanged(root.showToolbar)
|
||||
}
|
||||
}
|
||||
|
||||
onPositionChanged: {
|
||||
if (root.iskeyframe == false) return;
|
||||
if (pressed && root.requestedKeyFrame >= 0) {
|
||||
|
||||
@@ -9,6 +9,7 @@ Item {
|
||||
property string comment
|
||||
property string framenum
|
||||
property rect framesize
|
||||
property rect adjustedFrame
|
||||
property point profile
|
||||
property point center
|
||||
property double zoom
|
||||
@@ -16,6 +17,7 @@ Item {
|
||||
property double scaley
|
||||
property double offsetx : 0
|
||||
property double offsety : 0
|
||||
property double lockratio : -1
|
||||
onScalexChanged: canvas.requestPaint()
|
||||
onScaleyChanged: canvas.requestPaint()
|
||||
onOffsetxChanged: canvas.requestPaint()
|
||||
@@ -154,7 +156,7 @@ Item {
|
||||
property bool isMoving : false
|
||||
anchors.centerIn: root
|
||||
hoverEnabled: true
|
||||
acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MidButton
|
||||
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
||||
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||
|
||||
readonly property bool containsMouse: {
|
||||
@@ -174,7 +176,11 @@ Item {
|
||||
}
|
||||
|
||||
onPositionChanged: {
|
||||
if (pressed && root.requestedKeyFrame != -1) {
|
||||
if (!pressed) {
|
||||
mouse.accepted = false
|
||||
return
|
||||
}
|
||||
if (root.requestedKeyFrame != -1) {
|
||||
isMoving = true
|
||||
root.centerPoints[root.requestedKeyFrame].x = (mouseX - frame.x) / root.scalex;
|
||||
root.centerPoints[root.requestedKeyFrame].y = (mouseY - frame.y) / root.scaley;
|
||||
@@ -183,11 +189,8 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
onClicked: {
|
||||
if (mouse.button & Qt.MidButton) {
|
||||
root.showToolbar = !root.showToolbar
|
||||
toolBarChanged(root.showToolbar)
|
||||
} else {
|
||||
onPressed: {
|
||||
if (mouse.button & Qt.LeftButton) {
|
||||
if (root.requestedKeyFrame >= 0 && !isMoving) {
|
||||
root.seekToKeyframe();
|
||||
}
|
||||
@@ -223,7 +226,7 @@ Item {
|
||||
color: "transparent"
|
||||
border.color: "#ffff0000"
|
||||
Rectangle {
|
||||
id: "tlhandle"
|
||||
id: tlhandle
|
||||
anchors {
|
||||
top: parent.top
|
||||
left: parent.left
|
||||
@@ -239,24 +242,45 @@ Item {
|
||||
anchors.centerIn: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.SizeFDiagCursor
|
||||
onEntered: { tlhandle.color = '#ffff00'}
|
||||
onExited: { tlhandle.color = '#ff0000'}
|
||||
onEntered: {
|
||||
if (!pressed) {
|
||||
tlhandle.color = '#ffff00'
|
||||
}
|
||||
}
|
||||
onExited: {
|
||||
if (!pressed) {
|
||||
tlhandle.color = '#ff0000'
|
||||
}
|
||||
}
|
||||
onPressed: {
|
||||
oldMouseX = mouseX
|
||||
oldMouseY = mouseY
|
||||
effectsize.visible = true
|
||||
tlhandle.color = '#ffff00'
|
||||
}
|
||||
onPositionChanged: {
|
||||
if (pressed) {
|
||||
if (root.lockratio > 0) {
|
||||
var delta = Math.max(mouseX - oldMouseX, mouseY - oldMouseY)
|
||||
var newwidth = framerect.width - delta
|
||||
adjustedFrame = framesize
|
||||
adjustedFrame.width = Math.round(newwidth / root.scalex);
|
||||
adjustedFrame.height = Math.round(adjustedFrame.width / root.lockratio)
|
||||
adjustedFrame.y = (framerect.y - frame.y) / root.scaley + framesize.height - adjustedFrame.height;
|
||||
adjustedFrame.x = (framerect.x - frame.x) / root.scalex + framesize.width - adjustedFrame.width;
|
||||
framesize = adjustedFrame
|
||||
} else {
|
||||
framesize.x = (framerect.x + (mouseX - oldMouseX) - frame.x) / root.scalex;
|
||||
framesize.width = (framerect.width - (mouseX - oldMouseX)) / root.scalex;
|
||||
framesize.y = (framerect.y + (mouseY - oldMouseY) - frame.y) / root.scaley;
|
||||
framesize.height = (framerect.height - (mouseY - oldMouseY)) / root.scaley;
|
||||
}
|
||||
root.effectChanged()
|
||||
}
|
||||
}
|
||||
onReleased: {
|
||||
effectsize.visible = false
|
||||
tlhandle.color = '#ff0000'
|
||||
}
|
||||
}
|
||||
Text {
|
||||
@@ -272,7 +296,7 @@ Item {
|
||||
}
|
||||
}
|
||||
Rectangle {
|
||||
id: "trhandle"
|
||||
id: trhandle
|
||||
anchors {
|
||||
top: parent.top
|
||||
right: parent.right
|
||||
@@ -288,28 +312,48 @@ Item {
|
||||
anchors.centerIn: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.SizeBDiagCursor
|
||||
onEntered: { trhandle.color = '#ffff00'}
|
||||
onExited: { trhandle.color = '#ff0000'}
|
||||
onEntered: {
|
||||
if (!pressed) {
|
||||
trhandle.color = '#ffff00'
|
||||
}
|
||||
}
|
||||
onExited: {
|
||||
if (!pressed) {
|
||||
trhandle.color = '#ff0000'
|
||||
}
|
||||
}
|
||||
onPressed: {
|
||||
oldMouseX = mouseX
|
||||
oldMouseY = mouseY
|
||||
effectsize.visible = true
|
||||
trhandle.color = '#ffff00'
|
||||
}
|
||||
onPositionChanged: {
|
||||
if (pressed) {
|
||||
if (root.lockratio > 0) {
|
||||
var delta = Math.max(oldMouseX - mouseX, mouseY - oldMouseY)
|
||||
var newwidth = framerect.width - delta
|
||||
adjustedFrame = framesize
|
||||
adjustedFrame.width = Math.round(newwidth / root.scalex);
|
||||
adjustedFrame.height = Math.round(adjustedFrame.width / root.lockratio)
|
||||
adjustedFrame.y = (framerect.y - frame.y) / root.scaley + framesize.height - adjustedFrame.height;
|
||||
framesize = adjustedFrame
|
||||
} else {
|
||||
framesize.width = (framerect.width + (mouseX - oldMouseX)) / root.scalex;
|
||||
framesize.y = (framerect.y + (mouseY - oldMouseY) - frame.y) / root.scaley;
|
||||
framesize.height = (framerect.height - (mouseY - oldMouseY)) / root.scaley;
|
||||
}
|
||||
root.effectChanged()
|
||||
}
|
||||
}
|
||||
onReleased: {
|
||||
effectsize.visible = false
|
||||
trhandle.color = '#ff0000'
|
||||
}
|
||||
}
|
||||
}
|
||||
Rectangle {
|
||||
id: "blhandle"
|
||||
id: blhandle
|
||||
anchors {
|
||||
bottom: parent.bottom
|
||||
left: parent.left
|
||||
@@ -325,28 +369,46 @@ Item {
|
||||
anchors.centerIn: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.SizeBDiagCursor
|
||||
onEntered: { blhandle.color = '#ffff00'}
|
||||
onExited: { blhandle.color = '#ff0000'}
|
||||
onEntered: {
|
||||
if (!pressed) {
|
||||
blhandle.color = '#ffff00'
|
||||
}
|
||||
}
|
||||
onExited: {
|
||||
if (!pressed) {
|
||||
blhandle.color = '#ff0000'
|
||||
}
|
||||
}
|
||||
onPressed: {
|
||||
oldMouseX = mouseX
|
||||
oldMouseY = mouseY
|
||||
effectsize.visible = true
|
||||
blhandle.color = '#ffff00'
|
||||
}
|
||||
onPositionChanged: {
|
||||
if (pressed) {
|
||||
if (root.lockratio > 0) {
|
||||
var delta = Math.max(mouseX - oldMouseX, oldMouseY - mouseY)
|
||||
var newwidth = framerect.width - delta
|
||||
framesize.x = (framerect.x + (framerect.width - newwidth) - frame.x) / root.scalex;
|
||||
framesize.width = Math.round(newwidth / root.scalex);
|
||||
framesize.height = Math.round(framesize.width / root.lockratio)
|
||||
} else {
|
||||
framesize.x = (framerect.x + (mouseX - oldMouseX) - frame.x) / root.scalex;
|
||||
framesize.width = (framerect.width - (mouseX - oldMouseX)) / root.scalex;
|
||||
framesize.height = (framerect.height + (mouseY - oldMouseY)) / root.scaley;
|
||||
}
|
||||
root.effectChanged()
|
||||
}
|
||||
}
|
||||
onReleased: {
|
||||
effectsize.visible = false
|
||||
blhandle.color = '#ff0000'
|
||||
}
|
||||
}
|
||||
}
|
||||
Rectangle {
|
||||
id: "brhandle"
|
||||
id: brhandle
|
||||
anchors {
|
||||
bottom: parent.bottom
|
||||
right: parent.right
|
||||
@@ -362,22 +424,39 @@ Item {
|
||||
anchors.centerIn: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.SizeFDiagCursor
|
||||
onEntered: { brhandle.color = '#ffff00'}
|
||||
onExited: { brhandle.color = '#ff0000'}
|
||||
onEntered: {
|
||||
if (!pressed) {
|
||||
brhandle.color = '#ffff00'
|
||||
}
|
||||
}
|
||||
onExited: {
|
||||
if (!pressed) {
|
||||
brhandle.color = '#ff0000'
|
||||
}
|
||||
}
|
||||
onPressed: {
|
||||
oldMouseX = mouseX
|
||||
oldMouseY = mouseY
|
||||
effectsize.visible = true
|
||||
brhandle.color = '#ffff00'
|
||||
}
|
||||
onPositionChanged: {
|
||||
if (pressed) {
|
||||
if (root.lockratio > 0) {
|
||||
var delta = Math.max(oldMouseX - mouseX, oldMouseY - mouseY)
|
||||
var newwidth = framerect.width - delta
|
||||
framesize.width = Math.round(newwidth / root.scalex);
|
||||
framesize.height = Math.round(framesize.width / root.lockratio)
|
||||
} else {
|
||||
framesize.width = (framerect.width + (mouseX - oldMouseX)) / root.scalex;
|
||||
framesize.height = (framerect.height + (mouseY - oldMouseY)) / root.scaley;
|
||||
}
|
||||
root.effectChanged()
|
||||
}
|
||||
}
|
||||
onReleased: {
|
||||
effectsize.visible = false
|
||||
brhandle.color = '#ff0000'
|
||||
}
|
||||
}
|
||||
Text {
|
||||
|
||||
@@ -182,10 +182,6 @@ Item {
|
||||
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||
|
||||
onClicked: {
|
||||
if (mouse.button & Qt.MidButton) {
|
||||
root.showToolbar = !root.showToolbar
|
||||
toolBarChanged(root.showToolbar)
|
||||
}
|
||||
if (!root.isDefined) {
|
||||
if (mouse.button == Qt.RightButton) {
|
||||
// close shape, define control points
|
||||
|
||||
@@ -25,6 +25,7 @@ Item {
|
||||
anchors.centerIn: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.SizeHorCursor
|
||||
acceptedButtons: Qt.LeftButton
|
||||
onPressed: {
|
||||
root.percentage = mouseX / width
|
||||
root.splitterPos = mouseX
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
.\" This file was generated by kdemangen.pl
|
||||
.TH KDENLIVE 1 "Nov 2008" "K Desktop Environment" "An open source video editor."
|
||||
.TH Kdenlive 1 "Aug 2018" "KDE" "An open source video editor."
|
||||
.SH NAME
|
||||
kdenlive \- An open source non\-linear video editor.
|
||||
.SH SYNOPSIS
|
||||
kdenlive [Qt\-options] [KDE\-options] [options] [file]
|
||||
.SH DESCRIPTION
|
||||
Kdenlive is an open source non\-linear video editor which supports a
|
||||
large number of formats for editing, including DV, AVCHD (experimental support) and HDV. Kdenlive relies on several other open source projects, such as FFmpeg and MLT video framework.
|
||||
large number of formats for editing.
|
||||
It relies on several other open source projects,
|
||||
such as FFmpeg and MLT video framework.
|
||||
.SH OPTIONS
|
||||
.SS
|
||||
.SS Arguments:
|
||||
@@ -17,6 +19,9 @@ Document to open
|
||||
.TP
|
||||
.B \-\-mlt\-path <path>
|
||||
Set the path for MLT environnement
|
||||
.TP
|
||||
.B \-\-mlt\-log <verbose/debug>
|
||||
Set MLT log level
|
||||
.SS
|
||||
.SS Generic options:
|
||||
.TP
|
||||
@@ -46,7 +51,7 @@ End of options
|
||||
.SS
|
||||
.SS KDE options:
|
||||
.TP
|
||||
.B \-\-caption <caption>
|
||||
.B \-\-qwindowtitle <caption>
|
||||
Use 'caption' as name in the titlebar
|
||||
.TP
|
||||
.B \-\-icon <icon>
|
||||
@@ -148,11 +153,9 @@ the result of calling melt, ffmpeg, etc. This can be used for debugging.
|
||||
.SH SEE ALSO
|
||||
.BR kdenlive_render (1).
|
||||
Please see the homepage at
|
||||
.BR http://www.kdenlive.org/
|
||||
.BR https://www.kdenlive.org/
|
||||
.br
|
||||
.SH AUTHORS
|
||||
.nf
|
||||
Jean\-Baptiste Mardelle <jb@kdenlive.org>
|
||||
.br
|
||||
Marco Gittler <g.marco@freenet.de>
|
||||
.br
|
||||
|
||||
@@ -4,25 +4,29 @@
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<project_license>GPL-2.0+</project_license>
|
||||
<name>Kdenlive</name>
|
||||
<name xml:lang="ast">Kdenlive</name>
|
||||
<name xml:lang="ar">كدينلايڤ</name>
|
||||
<name xml:lang="bs">Kdenlive</name>
|
||||
<name xml:lang="ca">Kdenlive</name>
|
||||
<name xml:lang="ca-valencia">Kdenlive</name>
|
||||
<name xml:lang="cs">Kdenlive</name>
|
||||
<name xml:lang="da">Kdenlive</name>
|
||||
<name xml:lang="de">Kdenlive</name>
|
||||
<name xml:lang="el">Kdenlive</name>
|
||||
<name xml:lang="en-GB">Kdenlive</name>
|
||||
<name xml:lang="es">Kdenlive</name>
|
||||
<name xml:lang="et">Kdenlive</name>
|
||||
<name xml:lang="eu">Kdenlive</name>
|
||||
<name xml:lang="fi">Kdenlive</name>
|
||||
<name xml:lang="fr">Kdenlive</name>
|
||||
<name xml:lang="gl">Kdenlive</name>
|
||||
<name xml:lang="it">Kdenlive</name>
|
||||
<name xml:lang="ko">Kdenlive</name>
|
||||
<name xml:lang="nl">Kdenlive</name>
|
||||
<name xml:lang="nn">Kdenlive</name>
|
||||
<name xml:lang="pl">Kdenlive</name>
|
||||
<name xml:lang="pt">Kdenlive</name>
|
||||
<name xml:lang="pt-BR">Kdenlive</name>
|
||||
<name xml:lang="ru">Kdenlive</name>
|
||||
<name xml:lang="sk">Kdenlive</name>
|
||||
<name xml:lang="sl">Kdenlive</name>
|
||||
<name xml:lang="sv">Kdenlive</name>
|
||||
@@ -33,25 +37,28 @@
|
||||
<name xml:lang="zh-TW">Kdenlive</name>
|
||||
<summary>Video Editor</summary>
|
||||
<summary xml:lang="ar">محرّر فيديوهات</summary>
|
||||
<summary xml:lang="ast">Editor de videu</summary>
|
||||
<summary xml:lang="bs">Video uređivač</summary>
|
||||
<summary xml:lang="ca">Editor de vídeo</summary>
|
||||
<summary xml:lang="ca-valencia">Editor de vídeo</summary>
|
||||
<summary xml:lang="cs">Editor videí</summary>
|
||||
<summary xml:lang="cs">Editor videa</summary>
|
||||
<summary xml:lang="da">Videoredigering</summary>
|
||||
<summary xml:lang="de">Video-Editor</summary>
|
||||
<summary xml:lang="el">Επεξεργαστής βίντεο</summary>
|
||||
<summary xml:lang="en-GB">Video Editor</summary>
|
||||
<summary xml:lang="es">Editor de video</summary>
|
||||
<summary xml:lang="et">Videoredaktor</summary>
|
||||
<summary xml:lang="eu">Bideo editorea</summary>
|
||||
<summary xml:lang="fi">Videoeditori</summary>
|
||||
<summary xml:lang="fr">Éditeur vidéo</summary>
|
||||
<summary xml:lang="gl">Editor de vídeo</summary>
|
||||
<summary xml:lang="it">Editor video</summary>
|
||||
<summary xml:lang="ko">동영상 편집기</summary>
|
||||
<summary xml:lang="nl">Videobewerker</summary>
|
||||
<summary xml:lang="nn">Videoredigering</summary>
|
||||
<summary xml:lang="pl">Edytor wideo</summary>
|
||||
<summary xml:lang="pt">Editor de Vídeo</summary>
|
||||
<summary xml:lang="pt-BR">Editor de Vídeo</summary>
|
||||
<summary xml:lang="ru">Видеоредактор</summary>
|
||||
<summary xml:lang="sk">Editor videa</summary>
|
||||
<summary xml:lang="sl">Urejevalnik videa</summary>
|
||||
<summary xml:lang="sv">Videoeditor</summary>
|
||||
@@ -62,17 +69,22 @@
|
||||
<summary xml:lang="zh-TW">影像編輯器</summary>
|
||||
<description>
|
||||
<p>Kdenlive is a non linear video editor. It is based on the MLT framework and accepts many audio and video formats, allows you to add effects, transitions and render into the format of your choice.</p>
|
||||
<p xml:lang="ast">Kdenlive ye un editor de videu non llinial. Básase nel framework MLT y aceuta muchos formatos d'audiu y videu, permítete amestar efeutos, transiciones y renderizar nel formatu de la to escoyeta.</p>
|
||||
<p xml:lang="ar">«كدينلايڤ» هو محرّر فيديوهات غير خطّي. بُني على إطار عمل MLT ويقبل العديد من نُسق الصّوت والفيديو. كما ويسمح بإضافة التّأثيرات والانتقالات.</p>
|
||||
<p xml:lang="ca">El Kdenlive és un editor no lineal de vídeo. Està basat en l'entorn de treball MLT i accepta molts formats d'àudio i vídeo, permetent afegir efectes, transicions i representacions en el format de la vostra elecció.</p>
|
||||
<p xml:lang="ca-valencia">El Kdenlive és un editor no lineal de vídeo. Està basat en l'entorn de treball MLT i accepta molts formats d'àudio i vídeo, permetent afegir efectes, transicions i representacions en el format de la vostra elecció.</p>
|
||||
<p xml:lang="cs">Kdenlive je nelineární video editor. Je založený na frameworku MLT a přehrává mnoho zvukových a video formátů, umožňuje přidat efekty, přechody a renderuje do formátu podle vašeho výběru.</p>
|
||||
<p xml:lang="da">Kdenlive er et ikke-lineært videoredigeringsprogram. Det er baseret på MLT-framework og accepterer mange lyd- og videoformater, som giver dig mulighed for at tilføje effekter, overgange og rendere i det format du ønsker.</p>
|
||||
<p xml:lang="de">Kdenlive ist ein Video-Editor für nichtlinearen Schnitt. Es basiert auf MLT und verarbeitet viele Audio- und Video-Formate. Sie können Effekte und Übergänge benutzen und in Formate Ihrer Wahl umwandeln.</p>
|
||||
<p xml:lang="el">Το Kdenlive είναι ένας μη γραμμικός επεξεργαστής βίντεο. Βασίζεται στο πλαίσιο εργασίας MLT και δέχεται πολλούς τύπους ήχου και βίντεο, επιτρέπει την προσθήκη εφέ, μεταβάσεων και αποτύπωσης στον τύπο αποθήκευσης της επιλογής σας.</p>
|
||||
<p xml:lang="en-GB">Kdenlive is a non linear video editor. It is based on the MLT framework and accepts many audio and video formats, allows you to add effects, transitions and render into the format of your choice.</p>
|
||||
<p xml:lang="es">Kdenlive es un editor no lineal de video. Está basado en la infraestructura MLT y acepta numerosos formatos de audio y video, permitiendo agregar efectos, transiciones y procesar el video final en el formato deseado.</p>
|
||||
<p xml:lang="et">Kdenline on mittelineaarne videoredaktor. See tugineb MLT raamistikule ja võimaldab tarvitada paljusid heli- ja videovorminguid, lisada efekte ja üleminekuid ning renderdada tulemuse vajalikku vormingusse.</p>
|
||||
<p xml:lang="eu">Kdenlive bideo editore ez-linear bat da. MLT azpiegituran oinarritua dago eta audio eta bideo formatu asko onartzen ditu, efektuak gehitzeko aukera eskaintzen dizu, trantsizioak eta zuk nahi duzun formatuan errendatzea.</p>
|
||||
<p xml:lang="fi">Kdenlive on epälineaarinen videoeditori. Se perustuu MLT-frameworkiin ja toimii monen eri ääni- ja videoformaatin kanssa. Voit lisätä efektejä ja siirtymiä, sekä renderöidä projektin haluamaasi tiedostomuotoon.</p>
|
||||
<p xml:lang="fr">Kdenlive est un éditeur vidéo non-linéaire. Il est basé sur le moteur MLT et accèpte de nombreux formats audio et vidéos, permet d'ajouter des effets et transitions, et exporte le rendu dans le format de votre choix.</p>
|
||||
<p xml:lang="fr">Kdenlive est un éditeur vidéo non-linéaire. Il utilise le moteur MLT et accèpte de nombreux formats audio et vidéos, permet d'ajouter des effets et transitions, et exporte le rendu dans le format de votre choix.</p>
|
||||
<p xml:lang="gl">Kdenlive é un editor de vídeo non lineal. Está baseado na infraestrutura MLT e permite moitos formatos de son e vídeo, e permite engadir efectos, engadir transicións, e exportar en calquera formato.</p>
|
||||
<p xml:lang="it">Kdenlive è un editor video non lineare. È basato sull'infrastruttura MLT e accetta numerosi formati audio e video, consente di aggiungere effetti, transizioni e produrre il formato che si desidera.</p>
|
||||
<p xml:lang="ko">Kdenlive는 비선형 동영상 편집기입니다. MLT 프레임워크를 사용하며 여러 음악 및 동영상 형식을 지원하고, 효과 및 트랜지션을 추가할 수 있으며, 원하는 형식으로 렌더링할 수 있습니다.</p>
|
||||
<p xml:lang="nl">Kdenlive is een niet lineaire videobewerker. Het is gebaseerd op het MLT-framework en accepteert vele audio- en video-formaten, biedt de mogelijkheid effecten en overgangen toe te voegen en om te zetten naar het formaat van uw keuze.</p>
|
||||
<p xml:lang="nn">Kdenlive er eit program for ikkje-lineær videoredigering. Det er basert på MLT-rammeverket og støttar mange ulike video- og lydformat. Du kan leggja til spesialeffektar og overgangar, og eksportera til ulike filformat.</p>
|
||||
<p xml:lang="pl">Kdenlive jest nieliniowym edytorem wideo. Oparty jest na szkielecie MLT i może pracować na wielu formatach obrazu i dźwięku, umożliwia dodawanie efektów, przejść i renderowanie ich do dowolnego formatu.</p>
|
||||
@@ -88,25 +100,28 @@
|
||||
<p xml:lang="zh-TW">Kdenlive 是一套非線性的影像編輯器。基於 MLT 框架,可接受許多影音格式,讓您可以加入特效,過場並轉編碼成您選擇的格式。</p>
|
||||
<p>Features:</p>
|
||||
<p xml:lang="ar">الميزات:</p>
|
||||
<p xml:lang="ast">Carauterístiques:</p>
|
||||
<p xml:lang="bs">Svojstva:</p>
|
||||
<p xml:lang="ca">Característiques:</p>
|
||||
<p xml:lang="ca-valencia">Característiques:</p>
|
||||
<p xml:lang="cs">Vlastnosti:</p>
|
||||
<p xml:lang="da">Funktioner:</p>
|
||||
<p xml:lang="de">Funktionen:</p>
|
||||
<p xml:lang="el">Χαρακτηριστικά:</p>
|
||||
<p xml:lang="en-GB">Features:</p>
|
||||
<p xml:lang="es">Características:</p>
|
||||
<p xml:lang="et">Omadused:</p>
|
||||
<p xml:lang="eu">Eginbideak:</p>
|
||||
<p xml:lang="fi">Ominaisuuksia:</p>
|
||||
<p xml:lang="fr">Fonctionnalités :</p>
|
||||
<p xml:lang="gl">Funcionalidades:</p>
|
||||
<p xml:lang="it">Funzionalità:</p>
|
||||
<p xml:lang="ko">기능:</p>
|
||||
<p xml:lang="nl">Mogelijkheden:</p>
|
||||
<p xml:lang="nn">Funksjonar:</p>
|
||||
<p xml:lang="pl">Możliwości:</p>
|
||||
<p xml:lang="pt">Funcionalidades:</p>
|
||||
<p xml:lang="pt-BR">Funcionalidades:</p>
|
||||
<p xml:lang="ru">Возможности:</p>
|
||||
<p xml:lang="sk">Funkcie:</p>
|
||||
<p xml:lang="sl">Zmožnosti:</p>
|
||||
<p xml:lang="sv">Funktioner:</p>
|
||||
@@ -117,17 +132,22 @@
|
||||
<p xml:lang="zh-TW">功能:</p>
|
||||
<ul>
|
||||
<li>Intuitive multitrack interface.</li>
|
||||
<li xml:lang="ast">Interfaz multi-pista intuitiva.</li>
|
||||
<li xml:lang="ar">واجهة متعدّدة المسارات بديهيّة.</li>
|
||||
<li xml:lang="ca">Interfície multipista intuïtiva.</li>
|
||||
<li xml:lang="ca-valencia">Interfície multipista intuïtiva.</li>
|
||||
<li xml:lang="cs">Intuitivní vícepohledové rozhraní.</li>
|
||||
<li xml:lang="da">Intuitiv multispor-grænseflade.</li>
|
||||
<li xml:lang="de">Intuitive Mehrspur-Benutzeroberfläche.</li>
|
||||
<li xml:lang="el">Διαισθητική πολυκάναλη διεπαφή.</li>
|
||||
<li xml:lang="en-GB">Intuitive multitrack interface.</li>
|
||||
<li xml:lang="es">Interfaz multipista intuitiva.</li>
|
||||
<li xml:lang="et">Hõlpsasti mõistetav mitme paneeliga liides</li>
|
||||
<li xml:lang="eu">Intuiziozko aztarna-anitzeko interfazea.</li>
|
||||
<li xml:lang="fi">Selkeä moniraitainen käyttöliittymä</li>
|
||||
<li xml:lang="fr">Interface multipiste intuitive.</li>
|
||||
<li xml:lang="gl">Interface intuitiva con varias pistas.</li>
|
||||
<li xml:lang="it">Interfaccia multitraccia intuitiva.</li>
|
||||
<li xml:lang="ko">사용하기 편한 다중 트랙 인터페이스.</li>
|
||||
<li xml:lang="nl">Intuïtief interface met meerdere tracks.</li>
|
||||
<li xml:lang="nn">Intuitivt fleirsporsgrensesnitt.</li>
|
||||
<li xml:lang="pl">Intuicyjny interfejs wielościeżkowy.</li>
|
||||
@@ -143,17 +163,21 @@
|
||||
<li xml:lang="zh-TW">直覺的多軌介面</li>
|
||||
<li>Many effects and transitions.</li>
|
||||
<li xml:lang="ar">تأثيرات وانتقالات عديدة.</li>
|
||||
<li xml:lang="ast">Munchos efeutos y transiciones.</li>
|
||||
<li xml:lang="ca">Molts efectes i transicions.</li>
|
||||
<li xml:lang="ca-valencia">Molts efectes i transicions.</li>
|
||||
<li xml:lang="cs">Spousta efektů a přechodů.</li>
|
||||
<li xml:lang="da">Mange effekter og overgange.</li>
|
||||
<li xml:lang="de">Viele Effekte und Übergänge.</li>
|
||||
<li xml:lang="el">Πολλά εφέ και μεταβάσεις.</li>
|
||||
<li xml:lang="en-GB">Many effects and transitions.</li>
|
||||
<li xml:lang="es">Muchos efectos y transiciones.</li>
|
||||
<li xml:lang="et">Palju efekte ja üleminekuid</li>
|
||||
<li xml:lang="eu">Efektu eta trantsizio ugari.</li>
|
||||
<li xml:lang="fi">Monia erilaisia efektejä ja siirtymiä</li>
|
||||
<li xml:lang="fr">Nombreux effets et transitions.</li>
|
||||
<li xml:lang="gl">Moitos efectos e transicións.</li>
|
||||
<li xml:lang="it">Numerosi effetti e transizioni.</li>
|
||||
<li xml:lang="ko">다양한 효과와 트랜지션.</li>
|
||||
<li xml:lang="nl">Veel effecten en overgangen.</li>
|
||||
<li xml:lang="nn">Mange effektar og overgangar.</li>
|
||||
<li xml:lang="pl">Wiele efektów i przejść.</li>
|
||||
@@ -171,14 +195,19 @@
|
||||
<li xml:lang="ar">نطاقات الألوان</li>
|
||||
<li xml:lang="ca">Àmbits de color</li>
|
||||
<li xml:lang="ca-valencia">Àmbits de color</li>
|
||||
<li xml:lang="cs">Rozsahy barev</li>
|
||||
<li xml:lang="da">Farveskoper</li>
|
||||
<li xml:lang="de">Farbbereiche</li>
|
||||
<li xml:lang="el">Εμβέλειες χρωμάτων</li>
|
||||
<li xml:lang="en-GB">Colour scopes</li>
|
||||
<li xml:lang="es">Indicadores de color</li>
|
||||
<li xml:lang="et">Värviskoobid</li>
|
||||
<li xml:lang="eu">Kolore esparruak</li>
|
||||
<li xml:lang="fi">Väriavaruuksien säätömahdollisuus</li>
|
||||
<li xml:lang="fr">Graphes des couleurs</li>
|
||||
<li xml:lang="gl">Ámbitos de cores.</li>
|
||||
<li xml:lang="it">Diagrammi di colore</li>
|
||||
<li xml:lang="ko">색상 범위</li>
|
||||
<li xml:lang="nl">Kleurreeksen</li>
|
||||
<li xml:lang="nn">Fargeskop</li>
|
||||
<li xml:lang="pl">Zakresy barw</li>
|
||||
@@ -194,17 +223,21 @@
|
||||
<li xml:lang="zh-TW">顏色範圍</li>
|
||||
<li>Basic DVD Wizard</li>
|
||||
<li xml:lang="ar">مُرشد DVD أساسيّ</li>
|
||||
<li xml:lang="ast">Encontu básicu pa DVD</li>
|
||||
<li xml:lang="ca">Assistent bàsic per als DVD</li>
|
||||
<li xml:lang="ca-valencia">Assistent bàsic per als DVD</li>
|
||||
<li xml:lang="cs">Základní průvodce DVD</li>
|
||||
<li xml:lang="da">Grundlæggende dvd-guide</li>
|
||||
<li xml:lang="de">Einfacher DVD-Assistent</li>
|
||||
<li xml:lang="el">Βασικός οδηγός DVD</li>
|
||||
<li xml:lang="en-GB">Basic DVD Wizard</li>
|
||||
<li xml:lang="es">Asistente básico de DVD</li>
|
||||
<li xml:lang="et">Lihtne DVD nõustaja</li>
|
||||
<li xml:lang="eu">Oinarrizko DVD morroia</li>
|
||||
<li xml:lang="fi">Yksinkertainen DVD:n luonti</li>
|
||||
<li xml:lang="fr">Assistant DVD de base</li>
|
||||
<li xml:lang="gl">Asistente básico para DVD</li>
|
||||
<li xml:lang="it">Procedura guidata di base DVD</li>
|
||||
<li xml:lang="ko">기본 DVD 마법사</li>
|
||||
<li xml:lang="nl">Basis dvd-assistent</li>
|
||||
<li xml:lang="nn">Enkel DVD-vegvisar</li>
|
||||
<li xml:lang="pl">Pomocnik podstawowego DVD</li>
|
||||
@@ -220,12 +253,34 @@
|
||||
<li xml:lang="zh-TW">基本 DVD 精靈</li>
|
||||
</ul>
|
||||
</description>
|
||||
<releases>
|
||||
<release date="2018-10-11" version="18.08.2"/>
|
||||
</releases>
|
||||
<url type="homepage">https://kdenlive.org/</url>
|
||||
<url type="bugtracker">https://bugs.kde.org</url>
|
||||
<url type="help">https://userbase.kde.org/Kdenlive/Manual</url>
|
||||
<url type="donation">https://www.kde.org/community/donations/?app=kdenlive&source=appdata</url>
|
||||
<screenshots>
|
||||
<screenshot type="source">
|
||||
<image>https://kdenlive.org/wp-content/data/kdenlive-screenshot.png</image>
|
||||
<caption>Kdenlive 18.08</caption>
|
||||
<caption xml:lang="ca">Kdenlive 18.08</caption>
|
||||
<caption xml:lang="ca-valencia">Kdenlive 18.08</caption>
|
||||
<caption xml:lang="de">Kdenlive 18.08</caption>
|
||||
<caption xml:lang="en-GB">Kdenlive 18.08</caption>
|
||||
<caption xml:lang="es">Kdenlive 18.08</caption>
|
||||
<caption xml:lang="fi">Kdenlive 18.08</caption>
|
||||
<caption xml:lang="fr">Kdenlive 18.08</caption>
|
||||
<caption xml:lang="gl">Kdenlive 18.08</caption>
|
||||
<caption xml:lang="it">Kdenlive 18.08</caption>
|
||||
<caption xml:lang="nl">Kdenlive 18.08</caption>
|
||||
<caption xml:lang="pt">Kdenlive 18.08</caption>
|
||||
<caption xml:lang="pt-BR">Kdenlive 18.08</caption>
|
||||
<caption xml:lang="sv">Kdenlive 18.08</caption>
|
||||
<caption xml:lang="uk">Kdenlive 18.08</caption>
|
||||
<caption xml:lang="x-test">xxKdenlive 18.08xx</caption>
|
||||
<caption xml:lang="zh-CN">Kdenlive 18.08</caption>
|
||||
<caption xml:lang="zh-TW">Kdenlive 18.08</caption>
|
||||
<image>https://cdn.kde.org/screenshots/kdenlive/screenshot-monitors.png</image>
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
<project_group>KDE</project_group>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# KDE Config File
|
||||
[Desktop Entry]
|
||||
Name=Kdenlive
|
||||
Name[ast]=Kdenlive
|
||||
Name[ar]=كدينلايڤ
|
||||
Name[bs]=Kdenlive
|
||||
Name[ca]=Kdenlive
|
||||
Name[ca@valencia]=Kdenlive
|
||||
@@ -12,6 +12,7 @@ Name[el]=Kdenlive
|
||||
Name[en_GB]=Kdenlive
|
||||
Name[es]=Kdenlive
|
||||
Name[et]=Kdenlive
|
||||
Name[eu]=Kdenlive
|
||||
Name[fi]=Kdenlive
|
||||
Name[fr]=Kdenlive
|
||||
Name[ga]=Kdenlive
|
||||
@@ -20,6 +21,7 @@ Name[hu]=Kdenlive
|
||||
Name[it]=Kdenlive
|
||||
Name[ja]=Kdenlive
|
||||
Name[km]=Kdenlive
|
||||
Name[ko]=Kdenlive
|
||||
Name[lt]=Kdenlive
|
||||
Name[lv]=Kdenlive
|
||||
Name[mr]=के-डि-एनलाइव्ह
|
||||
@@ -43,17 +45,17 @@ Name[zh_CN]=Kdenlive
|
||||
Name[zh_TW]=Kdenlive
|
||||
GenericName=Video Editor
|
||||
GenericName[ar]=محرّر فيديوهات
|
||||
GenericName[ast]=Editor de videu
|
||||
GenericName[bs]=Video uređivač
|
||||
GenericName[ca]=Editor de vídeo
|
||||
GenericName[ca@valencia]=Editor de vídeo
|
||||
GenericName[cs]=Editor videí
|
||||
GenericName[cs]=Editor videa
|
||||
GenericName[da]=Videoredigering
|
||||
GenericName[de]=Video-Editor
|
||||
GenericName[el]=Επεξεργαστής βίντεο
|
||||
GenericName[en_GB]=Video Editor
|
||||
GenericName[es]=Editor de video
|
||||
GenericName[et]=Videoredaktor
|
||||
GenericName[eu]=Bideo editorea
|
||||
GenericName[fi]=Videomuokkain
|
||||
GenericName[fr]=Éditeur vidéo
|
||||
GenericName[ga]=Eagarthóir Físe
|
||||
@@ -62,6 +64,7 @@ GenericName[hu]=Videoszerkesztő
|
||||
GenericName[it]=Editor video
|
||||
GenericName[ja]=ビデオエディタ
|
||||
GenericName[km]=កម្មវិធីកែសម្រួលវីដេអូ
|
||||
GenericName[ko]=동영상 편집기
|
||||
GenericName[lt]=Video redaktorius
|
||||
GenericName[lv]=Video redaktors
|
||||
GenericName[mr]=व्हिडीओ संपादक
|
||||
@@ -81,46 +84,36 @@ GenericName[uk]=Відеоредактор
|
||||
GenericName[x-test]=xxVideo Editorxx
|
||||
GenericName[zh_CN]=视频编辑器
|
||||
GenericName[zh_TW]=影像編輯器
|
||||
Comment=Nonlinear video editor for KDE
|
||||
Comment[ar]=محرّر فيديوهات غير خطّيّ لكدي
|
||||
Comment[ast]=Editor de videu non llinial pa KDE
|
||||
Comment[bs]=Nelinearni video uređivač za KDE
|
||||
Comment[ca]=Editor de vídeo no lineal per al KDE
|
||||
Comment[ca@valencia]=Editor de vídeo no lineal per al KDE
|
||||
Comment[cs]=Nelineární editor videí pro KDE
|
||||
Comment[da]=Ikke-lineær videoredigering til KDE
|
||||
Comment[de]=Nichtlinearer Video-Editor für KDE
|
||||
Comment[el]=Μη γραμμικός επεξεργαστής βίντεο για το KDE
|
||||
Comment[en_GB]=Nonlinear video editor for KDE
|
||||
Comment[es]=Editor no lineal de video para KDE
|
||||
Comment[et]=KDE mittelineaarne videoredaktor
|
||||
Comment[fi]=Epälineaarinen videomuokkain KDE:lle
|
||||
Comment[fr]=Éditeur vidéo non linéaire pour KDE
|
||||
Comment[gl]=Editor de vídeo non linear para KDE
|
||||
Comment[hu]=Nemlineáris videoszerkesztő a KDE-hez
|
||||
Comment[it]=Editor di video non lineare per KDE
|
||||
Comment[ja]=KDE 向けノンリニアビデオエディタ
|
||||
Comment[km]=កម្មវិធីកែសម្រួលវីដេអូមិនលីនេអ៊ែរសម្រាប់ KDE
|
||||
Comment[lt]=Nelinijinis veido redaktorius skirtas KDE
|
||||
Comment[lv]=Nelineārais video redaktors KDE videi
|
||||
Comment[mr]=केडीई करिता अरेषीय व्हिडीओ संपादक
|
||||
Comment[nb]=Videoredigeringsprogram for KDE med dataklipping
|
||||
Comment[nl]=Niet-lineaire video-bewerker voor KDE
|
||||
Comment=Nonlinear video editor by KDE
|
||||
Comment[ar]=محرّر فيديوهات غير خطّيّ من كدي
|
||||
Comment[ca]=Editor de vídeo no lineal, creat per la comunitat KDE
|
||||
Comment[ca@valencia]=Editor de vídeo no lineal, creat per la comunitat KDE
|
||||
Comment[cs]=Nelineární editor videa od KDE
|
||||
Comment[da]=Ikke-lineært videoredigeringsprogram af KDE
|
||||
Comment[de]=Nichtlinearer Video-Editor von KDE
|
||||
Comment[el]=Μη γραμμικός επεξεργαστής βίντεο από το KDE
|
||||
Comment[en_GB]=Non-linear video editor by KDE
|
||||
Comment[es]=Editor no lineal de video de KDE
|
||||
Comment[eu]=KDEren bideo editore ez-lineala
|
||||
Comment[fi]=KDE:n epälineaarinen videomuokkain
|
||||
Comment[fr]=Éditeur vidéo non linéaire par KDE
|
||||
Comment[gl]=Editor de vídeo non lineal por KDE
|
||||
Comment[it]=Editor di video non lineare di KDE
|
||||
Comment[ko]=KDE의 비선형 동영상 편집기
|
||||
Comment[nl]=Niet-lineaire video-bewerker door KDE
|
||||
Comment[nn]=Program for ikkje-lineær videoredigering
|
||||
Comment[pl]=Nieliniowy edytor wideo dla KDE
|
||||
Comment[pt]=Editor de vídeo não-linear para o KDE
|
||||
Comment[pt_BR]=Editor de vídeo não-linear para o KDE
|
||||
Comment[ro]=Redactor de imagini neliniar pentru KDE
|
||||
Comment[pl]=Nieliniowy edytor wideo w ramach KDE
|
||||
Comment[pt]=Editor de vídeo não-linear do KDE
|
||||
Comment[pt_BR]=Editor de vídeo não-linear do KDE
|
||||
Comment[ru]=Нелинейный видеоредактор от KDE
|
||||
Comment[sk]=Nelineárny editor videa pre KDE
|
||||
Comment[sl]=Ne-linearni urejevalnik videa za KDE
|
||||
Comment[sv]=Icke-linjär videoeditor för KDE
|
||||
Comment[sl]=Ne-linearni urejevalnik videa s strani KDE
|
||||
Comment[sv]=Icke-linjär videoeditor av KDE
|
||||
Comment[tr]=KDE için doğrusal olmayan video düzenleyici
|
||||
Comment[ug]=KDE ئۈچۈن سىزىقسىز سىن تەھرىرلىگۈچ
|
||||
Comment[uk]=Нелінійний редактор відео для KDE
|
||||
Comment[x-test]=xxNonlinear video editor for KDExx
|
||||
Comment[zh_CN]=KDE 的非线性视频编辑器
|
||||
Comment[zh_TW]=KDE 上的非線性影像編輯器
|
||||
Comment[uk]=Нелінійний редактор відео від KDE
|
||||
Comment[x-test]=xxNonlinear video editor by KDExx
|
||||
Comment[zh_CN]=KDE 推出的非线性视频编辑器
|
||||
Comment[zh_TW]=來自 KDE 的非線性影像編輯器
|
||||
Type=Application
|
||||
Exec=kdenlive %U
|
||||
Icon=kdenlive
|
||||
@@ -130,25 +123,32 @@ Terminal=false
|
||||
MimeType=application/x-kdenlive;
|
||||
Categories=Qt;KDE;AudioVideo;AudioVideoEditing;
|
||||
Keywords=editing;video;audio;mlt;kde;
|
||||
Keywords[ar]=تحرير;فيديو;صوت;كدي;واجهة;مسارات;تعدد;
|
||||
Keywords[ca]=edició;vídeo;àudio;mlt;kde;
|
||||
Keywords[ca@valencia]=edició;vídeo;àudio;mlt;kde;
|
||||
Keywords[cs]=úprava;video;zvuk;mlt;kde;
|
||||
Keywords[da]=redigering;video;lyd;mlt;kde;
|
||||
Keywords[de]=Editing;Bearbeitung;Schnitt;Videoschnitt;Video;Audio;MLT;
|
||||
Keywords[el]=επεξεργασία;βίντεο;ήχος;mlt;kde;
|
||||
Keywords[en_GB]=editing;video;audio;mlt;kde;
|
||||
Keywords[es]=edición;video;audio;mlt;kde;
|
||||
Keywords[et]=redigeerimine;muutmine;video;audio;heli;mlt;kde;
|
||||
Keywords[eu]=editatzea;bideoa;audioa;mlt;kde;
|
||||
Keywords[fi]=editing;video;audio;mlt;kde;editointi;ääni;
|
||||
Keywords[fr]=montage;vidéo;audio;mlt;kde;
|
||||
Keywords[gl]=editing;edición;video;vídeo;audio;son;mlt;kde;
|
||||
Keywords[it]=editing;video;audio;mlt;kde;
|
||||
Keywords[ko]=editing;video;audio;mlt;kde;편집;비디오;오디오;동영상;음악;
|
||||
Keywords[nl]=bewerken;video;audio;mlt;kde;
|
||||
Keywords[nn]=redigering;video;lyd;mlt;kde;
|
||||
Keywords[pl]=edytowanie;video;wideo;filmy;audio;dźwięk;mlt;kde;
|
||||
Keywords[pt]=edição;vídeo;áudio;MLT;kde;
|
||||
Keywords[pt_BR]=edição;vídeo;áudio;mlt;kde;
|
||||
Keywords[ru]=editing;video;audio;редактирование;видео;аудио;mlt;kde;
|
||||
Keywords[sk]=editovanie;video;audio;mlt;kde;
|
||||
Keywords[sl]=urejanje;video;zvok;mlt;kde;
|
||||
Keywords[sv]=redigering;video;ljud;mlt;kde;
|
||||
Keywords[tr]=editing;video;audio;mlt;kde;
|
||||
Keywords[uk]=editing;video;audio;mlt;kde;редагування;відео;звук;аудіо;млт;кдє;
|
||||
Keywords[x-test]=xxeditingxx;xxvideoxx;xxaudioxx;xxmltxx;xxkdexx;
|
||||
Keywords[zh_CN]=editing;video;audio;mlt;kde;编辑;视频;音频;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
|
||||
<mime-type type="application/x-kdenlive">
|
||||
<comment>Kdenlive video project document</comment>
|
||||
<comment xml:lang="ast">Documentu de proyeutu de videu Kdenlive</comment>
|
||||
<comment xml:lang="ar">مستند مشروع «كدينلايڤ» ڤديوهيّ</comment>
|
||||
<comment xml:lang="bs">Kdenlive video projekt dokument</comment>
|
||||
<comment xml:lang="ca">document de projecte de vídeo del Kdenlive</comment>
|
||||
<comment xml:lang="ca@valencia">document de projecte de vídeo del Kdenlive</comment>
|
||||
@@ -13,6 +13,7 @@
|
||||
<comment xml:lang="en_GB">Kdenlive video project document</comment>
|
||||
<comment xml:lang="es">Documento de proyecto de video de Kdenlive</comment>
|
||||
<comment xml:lang="et">Kdenlive'i videoprojekti dokument</comment>
|
||||
<comment xml:lang="eu">Kdenlive bideo proiektu dokumentua</comment>
|
||||
<comment xml:lang="fi">Kdenlive-videoprojektitiedosto</comment>
|
||||
<comment xml:lang="fr">Projet vidéo Kdenlive</comment>
|
||||
<comment xml:lang="gl">Documento dun proxecto de vídeo de Kdenlive</comment>
|
||||
@@ -36,7 +37,7 @@
|
||||
</mime-type>
|
||||
<mime-type type="application/x-kdenlivetitle">
|
||||
<comment>Kdenlive video title</comment>
|
||||
<comment xml:lang="ast">Títulu de videu Kdenlive</comment>
|
||||
<comment xml:lang="ar">عنوان «كدينلايڤ» ڤديوهيّ</comment>
|
||||
<comment xml:lang="bs">Kdenlive video naslov</comment>
|
||||
<comment xml:lang="ca">títol de vídeo del Kdenlive</comment>
|
||||
<comment xml:lang="ca@valencia">títol de vídeo del Kdenlive</comment>
|
||||
@@ -47,6 +48,7 @@
|
||||
<comment xml:lang="en_GB">Kdenlive video title</comment>
|
||||
<comment xml:lang="es">Título de video de Kdenlive</comment>
|
||||
<comment xml:lang="et">Kdenlive'i videotiitel</comment>
|
||||
<comment xml:lang="eu">Kdenlive video izenburua</comment>
|
||||
<comment xml:lang="fi">Kdenlive-video-otsikko</comment>
|
||||
<comment xml:lang="fr">Titre vidéo Kdenlive</comment>
|
||||
<comment xml:lang="gl">Título de vídeo de Kdenlive</comment>
|
||||
@@ -6,6 +6,9 @@
|
||||
<parameter type="animatedrect" name="rect" default="0 0 %width %height 1">
|
||||
<name>Rectangle</name>
|
||||
</parameter>
|
||||
<parameter type="animated" name="rotation" max="360" min="-360" default="0" notintimeline="1">
|
||||
<name>Rotation</name>
|
||||
</parameter>
|
||||
<parameter type="list" name="compositing" default="0" paramlist="0;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;6;8">
|
||||
<paramlistdisplay>Alpha blend,Xor,Plus,Multiply,Screen,Overlay,Darken,Lighten,Color dodge,Color burn,Hard light,Soft light,Difference,Exclusion,Bitwise or,Bitwise and,Bitwise xor,Bitwise nor,Bitwise nand,Bitwise not xor,Destination in,Destination out</paramlistdisplay>
|
||||
<name>Compositing</name>
|
||||
@@ -13,5 +16,8 @@
|
||||
<parameter type="bool" name="distort" default="0" min="0" max="1">
|
||||
<name>Distort</name>
|
||||
</parameter>
|
||||
<parameter type="bool" name="rotate_center" default="1" min="0" max="1">
|
||||
<name>Rotate from center</name>
|
||||
</parameter>
|
||||
</transition>
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 238 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 249 KiB |
|
Before Width: | Height: | Size: 313 KiB |
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 3.5 KiB |
@@ -16,8 +16,8 @@
|
||||
<!-- TRANS:ROLES_OF_TRANSLATORS -->
|
||||
</authorgroup>
|
||||
<legalnotice>&FDLNotice;</legalnotice>
|
||||
<date>2011-06-17</date>
|
||||
<releaseinfo>0.8.2</releaseinfo>
|
||||
<date>2018-10-27</date>
|
||||
<releaseinfo>Applications 18.12</releaseinfo>
|
||||
<abstract>
|
||||
<para></para>
|
||||
</abstract>
|
||||
@@ -27,16 +27,17 @@
|
||||
<keyword>video</keyword>
|
||||
</keywordset>
|
||||
</bookinfo>
|
||||
<!--userbase <timestamp>2011-06-17T15:39:59Z</timestamp>-->
|
||||
<!--userbase <timestamp>2018-10-27T11:21:38Z</timestamp>-->
|
||||
|
||||
<!--userbase-content-->
|
||||
<chapter id="creating-a-new-project"><title>Creating a new project</title>
|
||||
<chapter id="quick-start"><title>Quick Start</title>
|
||||
<sect1 id="creating-a-new-project"><title>Creating a new project</title>
|
||||
<para>
|
||||
<screenshot>
|
||||
<screeninfo></screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="Kdenlive_Quickstart-Folder-Structure.png" format="PNG"/>
|
||||
<imagedata fileref="kdenlive_quickstart-folder-structure.png" format="PNG"/>
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>Kdenlive directory structure</phrase>
|
||||
@@ -45,16 +46,20 @@
|
||||
<para>Kdenlive directory structure</para>
|
||||
</caption>
|
||||
</mediaobject>
|
||||
</screenshot></para>
|
||||
<para>The first step is creating a new (empty) folder for our new project. I will call it <filename>quickstart-tutorial/</filename> in this tutorial. Then get some sample video clips, or download them from here:<ulink url="http://granjow.net/uploads/kdenlive/manual/kdenlive-tutorial-videos-2011-avi.tar.bz2">kdenlive-tutorial-videos-2011-avi.tar.bz2</ulink> (7 MB)<footnote><para>If you prefer Theora (which you probably don’t since Ogg Video usually causes problems), you can alternatively download <ulink url="http://granjow.net/uploads/kdenlive/manual/kdenlive-tutorial-videos-2011-ogv.tar.bz2">kdenlive-tutorial-videos-2011-ogv.tar.bz2</ulink>.</para></footnote>, and extract them to ⪚ a <filename>quickstart-tutorial/Videos/</filename> subfolder inside the project folder.</para>
|
||||
<para>The image on the left shows the suggested directory structure: Each project has its own directory, with video files in the <filename>Videos</filename> subdirectory, audio files in the <filename>Audio</filename> directory, &etc; (<ulink url="http://userbase.kde.org/Special:myLanguage/Kdenlive/Manual/Projects_and_Files#File_Structure">read more</ulink>)</para>
|
||||
<para>(The tutorial from now on assumes that you use the sample videos provided, but it works with any.)</para>
|
||||
</screenshot>
|
||||
</para>
|
||||
<para>The first step is creating a new (empty) folder for our new project. I will call it <filename>quickstart-tutorial/</filename> in this tutorial. Then get some sample video clips, or download them from here:<ulink url="http://granjow.net/uploads/kdenlive/manual/kdenlive-tutorial-videos-2011-avi.tar.bz2">kdenlive-tutorial-videos-2011-avi.tar.bz2</ulink> (7 MB)<footnote><para>If you prefer Theora (which you probably don’t since Ogg Video usually causes problems), you can alternatively download <ulink url="http://granjow.net/uploads/kdenlive/manual/kdenlive-tutorial-videos-2011-ogv.tar.bz2">kdenlive-tutorial-videos-2011-ogv.tar.bz2</ulink>.</para></footnote>, and extract them to ⪚ a <filename>quickstart-tutorial/Videos/</filename> subfolder inside the project folder.
|
||||
</para>
|
||||
<para>The image on the left shows the suggested directory structure: Each project has its own directory, with video files in the <filename>Videos</filename> subdirectory, audio files in the <filename>Audio</filename> directory, &etc; (<ulink url="http://userbase.kde.org/Special:myLanguage/Kdenlive/Manual/Projects_and_Files#File_Structure">read more</ulink>)
|
||||
</para>
|
||||
<para>(The tutorial from now on assumes that you use the sample videos provided, but it works with any.)
|
||||
</para>
|
||||
<para>
|
||||
<screenshot>
|
||||
<screeninfo></screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="Kdenlive_Quickstart-New-Project.png" format="PNG"/>
|
||||
<imagedata fileref="kdenlive_quickstart-new-project.png" format="PNG"/>
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>New Project dialog</phrase>
|
||||
@@ -63,17 +68,20 @@
|
||||
<para>New Project dialog</para>
|
||||
</caption>
|
||||
</mediaobject>
|
||||
</screenshot></para>
|
||||
<para>Open <application>Kdenlive</application> and create a new project (<menuchoice><guimenu>File</guimenu><guimenuitem>New</guimenuitem></menuchoice>).</para>
|
||||
<para>Choose the previously created project folder (<filename>quickstart-tutorial/</filename>) and select an appropriate project profile. The video files provided above are 720p, 23.98 fps.<footnote><para><ulink url="http://en.wikipedia.org/wiki/720p">720</ulink> is the video height, p stands for <ulink url="http://en.wikipedia.org/wiki/Progressive_scan">progressive scan</ulink> in contrast to <ulink url="http://en.wikipedia.org/wiki/Interlaced_video">interlaced video</ulink>, and the fps number denotes the number of full frames per second.</para></footnote> If you are using your own files and don’t know which one to use, <application>Kdenlive</application> will suggest an appropriate one when the first clip is added, so you can leave the field on whatever it is.</para>
|
||||
</chapter>
|
||||
<chapter id="adding-clips"><title>Adding clips</title>
|
||||
</screenshot>
|
||||
</para>
|
||||
<para>Open &kdenlive; and create a new project (<menuchoice><guimenu>File</guimenu><guimenuitem>New</guimenuitem></menuchoice>).
|
||||
</para>
|
||||
<para>Choose the previously created project folder (<filename>quickstart-tutorial/</filename>) and select an appropriate project profile. The video files provided above are 720p, 23.98 fps.<footnote><para><ulink url="http://en.wikipedia.org/wiki/720p">720</ulink> is the video height, p stands for <ulink url="http://en.wikipedia.org/wiki/Progressive_scan">progressive scan</ulink> in contrast to <ulink url="http://en.wikipedia.org/wiki/Interlaced_video">interlaced video</ulink>, and the fps number denotes the number of full frames per second.</para></footnote> If you are using your own files and don’t know which one to use, &kdenlive; will suggest an appropriate one when the first clip is added <footnote><para>Provided Configure Kdenlive Settings under <ulink url="http://userbase.kde.org/Special:myLanguage/Kdenlive/Manual/Settings_Menu/Configure_Kdenlive#Misc">Misc</ulink> is set to <emphasis>Check if first added clip matches project profile</emphasis></para></footnote> , so you can leave the field on whatever it is.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="adding-clips"><title>Adding clips</title>
|
||||
<para>
|
||||
<screenshot>
|
||||
<screeninfo></screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="Kdenlive_Quickstart-Add-Clips.png" format="PNG"/>
|
||||
<imagedata fileref="kdenlive_quickstart-add-clips.png" format="PNG"/>
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>Project Tree: Adding video clips</phrase>
|
||||
@@ -82,30 +90,34 @@
|
||||
<para>Project Tree: Adding video clips</para>
|
||||
</caption>
|
||||
</mediaobject>
|
||||
</screenshot></para>
|
||||
<para>Now that the project is ready, let’s start adding some clips (&ie; the ones you downloaded). This works via the <emphasis>Project Tree widget</emphasis>; a click on the <guilabel>Add Clip</guilabel> icon directly opens the file dialog, a click on the small arrow shows a list of additional clip types that can be added as well. Video clips, audio clips, images, and other <application>Kdenlive</application> projects can be added via the default <guilabel>Add Clip</guilabel> dialog.</para>
|
||||
</screenshot>
|
||||
</para>
|
||||
<para>Now that the project is ready, let’s start adding some clips (&ie; the ones you downloaded). This works via the <emphasis>Project Tree widget</emphasis>; a click on the <guilabel>Add Clip</guilabel> icon <inlinemediaobject> <imageobject> <imagedata fileref="Icon-add-clip.png" format="PNG"/> </imageobject> </inlinemediaobject> directly opens the file dialog, a click on the small arrow shows a list of additional clip types that can be added as well. Video clips, audio clips, images, and other &kdenlive; projects can be added via the default <guilabel>Add Clip</guilabel> dialog.
|
||||
</para>
|
||||
<para>
|
||||
<screenshot>
|
||||
<screeninfo></screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="Kdenlive_Quickstart-Mainwindow.png" format="PNG"/>
|
||||
<imagedata fileref="kdenlive_quickstart-mainwindow.png" format="PNG"/>
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>Kdenlive 0.8 window with the tutorial files</phrase>
|
||||
<phrase>Kdenlive 16.08 window with the tutorial files</phrase>
|
||||
</textobject>
|
||||
<caption>
|
||||
<para>Kdenlive 0.8 window with the tutorial files</para>
|
||||
<para>Kdenlive 16.08 window with the tutorial files</para>
|
||||
</caption>
|
||||
</mediaobject>
|
||||
</screenshot></para>
|
||||
<para>After loading the clips, <application>Kdenlive</application> will look similar to this. On the top left there is the already known project tree. Right of it are the monitors that show video; The clip monitor displays video from the original clips, the project monitor shows how the output video will look, with all effects, transitions, &etc; applied. The third, also very important, item is the timeline (below the monitors): This is the place where the video clips will be edited. There are two different types of tracks, Video and Audio. Video tracks can contain any kind of clip, audio tracks as well – but when dropping a video file to the audio track, only the audio will be used.</para>
|
||||
</screenshot>
|
||||
</para>
|
||||
<para>After loading the clips, &kdenlive; will look similar to this. On the top left there is the already known project tree. Right of it are the monitors that show video; The clip monitor displays video from the original clips, the project monitor shows how the output video will look, with all effects, transitions, &etc; applied. The third, also very important, item is the timeline (below the monitors): This is the place where the video clips will be edited. There are two different types of tracks, Video and Audio. Video tracks can contain any kind of clip, audio tracks as well – but when dropping a video file to the audio track, only the audio will be used.
|
||||
</para>
|
||||
<para>
|
||||
<screenshot>
|
||||
<screeninfo></screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="Kdenlive_Quickstart-Save-Project.png" format="PNG"/>
|
||||
<imagedata fileref="kdenlive_quickstart-save-project.png" format="PNG"/>
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>Saving a Kdenlive project</phrase>
|
||||
@@ -114,17 +126,22 @@
|
||||
<para>Saving a Kdenlive project</para>
|
||||
</caption>
|
||||
</mediaobject>
|
||||
</screenshot></para>
|
||||
<para>Let’s save the work via <menuchoice><guimenu>File</guimenu><guimenuitem>Save</guimenuitem></menuchoice>. This saves our project, &ie; where we placed the clips on the timeline, which effects we applied, and so on. It can <emphasis>not</emphasis> be played.<footnote><para>To be correct, it <emphasis>can</emphasis> be played using <varname>melt yourproject.kdenlive</varname>, but this is not the way you would want to present your final video since it is (most likely) too slow. Additionally, it only works if melt is installed.</para></footnote> The process of creating the final video is called <emphasis>Rendering</emphasis>.</para>
|
||||
</chapter>
|
||||
<chapter id="timeline"><title>Timeline</title>
|
||||
<para>Now comes the actual editing. Project clips are combined to the final result on the timeline. They get there by drag and drop: Drag some Napoli (assuming you are using the files provided above, as in the rest of this quick start tutorial; If not, please make sure your screen is waterproof, and perhaps tomatoproof), and drop it onto the first track in the timeline.</para>
|
||||
</screenshot>
|
||||
</para>
|
||||
<para>Let’s save the work via <menuchoice><guimenu>File</guimenu><guimenuitem>Save</guimenuitem></menuchoice>. This saves our project, &ie; where we placed the clips on the timeline, which effects we applied, and so on. It can <emphasis>not</emphasis> be played.<footnote><para>To be correct, it <emphasis>can</emphasis> be played using <varname>melt yourproject.kdenlive</varname>, but this is not the way you would want to present your final video since it is (most likely) too slow. Additionally, it only works if melt is installed.</para></footnote> The process of creating the final video is called <emphasis>Rendering</emphasis>.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="timeline"><title>Timeline</title>
|
||||
<para>See also <link linkend="timeline">Timeline section of the manual</link>
|
||||
</para>
|
||||
<para>Now comes the actual editing. Project clips are combined to the final result on the timeline. They get there by drag and drop: Drag some Napoli (assuming you are using the files provided above, as in the rest of this quick start tutorial; If not, please make sure your screen is waterproof, and perhaps tomatoproof) from the project tree, and drop it onto the first track in the timeline.
|
||||
</para>
|
||||
<para>
|
||||
<screenshot>
|
||||
<screeninfo></screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="Kdenlive_Quickstart-Timeline-Clips.png" format="PNG"/>
|
||||
<imagedata fileref="kdenlive_quickstart-timeline-clips.png" format="PNG"/>
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>First clips in the timeline</phrase>
|
||||
@@ -133,14 +150,16 @@
|
||||
<para>First clips in the timeline</para>
|
||||
</caption>
|
||||
</mediaobject>
|
||||
</screenshot></para>
|
||||
<para>Since some cutlery is needed as well, drop the spoon on the first track as well. Then drag the Napoli to the beginning of the timeline (otherwise the rendered video would start with some seconds of plain black), and the Spoon right after the Napoli, such that it looks like in the image on the left. (Where I have zoomed in with <keycombo>&Ctrl;<keycap>Wheel</keycap></keycombo>.)</para>
|
||||
</screenshot>
|
||||
</para>
|
||||
<para>Since some cutlery is needed as well, grab the spoon clip and drop it on the first track as well. Then drag the Napoli to the beginning of the timeline (otherwise the rendered video would start with some seconds of plain black), and the Spoon right after the Napoli, such that it looks like in the image on the left. (Where I have zoomed in with <keycombo>&Ctrl;<keycap>Wheel</keycap></keycombo>.)
|
||||
</para>
|
||||
<para>
|
||||
<screenshot>
|
||||
<screeninfo></screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="Kdenlive_Quickstart-TimelineCursor.png" format="PNG"/>
|
||||
<imagedata fileref="kdenlive_quickstart-timelinecursor.png" format="PNG"/>
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>Timeline cursor</phrase>
|
||||
@@ -149,14 +168,16 @@
|
||||
<para>Timeline cursor</para>
|
||||
</caption>
|
||||
</mediaobject>
|
||||
</screenshot></para>
|
||||
<para>The result can already be previewed by pressing <keycap>Space</keycap> (or the <guilabel>Play</guilabel> button in the project monitor). You will see the Napoli directly followed by a Spoon. If the timeline cursor is not at the beginning, the project monitor will start playing somewhere in the middle; you can move it by dragging it either on the timeline ruler or in the project monitor. If you prefer keyboard shortcuts, <keycombo>&Ctrl;<keycap>Home</keycap></keycombo> does the same for the monitor that is activated. (Select the <guilabel>Project Monitor</guilabel> if it is not selected yet before using the shortcut.)</para>
|
||||
</screenshot>
|
||||
</para>
|
||||
<para>The result can already be previewed by pressing <keycap>Space</keycap> (or the <guilabel>Play</guilabel> button in the project monitor). You will see the Napoli directly followed by a Spoon. If the timeline cursor is not at the beginning, the project monitor will start playing somewhere in the middle; you can move it by dragging it either on the timeline ruler or in the project monitor. If you prefer keyboard shortcuts, <keycombo>&Ctrl;<keycap>Home</keycap></keycombo> does the same for the monitor that is activated. (Select the <guilabel>Project Monitor</guilabel> if it is not selected yet before using the shortcut.)
|
||||
</para>
|
||||
<para>
|
||||
<screenshot>
|
||||
<screeninfo></screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="Kdenlive_Quickstart-Resize-Marker.png" format="PNG"/>
|
||||
<imagedata fileref="kdenlive_quickstart-resize-marker.png" format="PNG"/>
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>Resize marker</phrase>
|
||||
@@ -165,14 +186,16 @@
|
||||
<para>Resize marker</para>
|
||||
</caption>
|
||||
</mediaobject>
|
||||
</screenshot></para>
|
||||
<para>Since after eating comes playing, there is a Billard clip. Add it to the timeline as well. The first 1.5 seconds nothing happens in the clip, so it should perhaps be <guilabel>cut</guilabel> to avoid the video becoming boring. An easy way<footnote><para>Writing it this way suggests that there are several ways of cutting a clip. This is in fact true.</para></footnote> for this is to move the timeline cursor to the desired position (&ie; the position where you want to cut the video), then drag the left border of the clip when the resize marker appears. It will snap in at the timeline cursor when you move close enough.</para>
|
||||
</screenshot>
|
||||
</para>
|
||||
<para>Since after eating comes playing, there is a Billiards clip. Add it to the timeline as well. For the first 1.5 seconds nothing happens in the clip, so it should perhaps be <guilabel>cut</guilabel> to avoid the video becoming boring. An easy way<footnote><para>Writing it this way suggests that there are several ways of cutting a clip. This is in fact true.</para></footnote> for this is to move the timeline cursor to the desired position (&ie; the position where you want to cut the video), then drag the left border of the clip when the resize marker appears. It will snap in at the timeline cursor when you move close enough.
|
||||
</para>
|
||||
<para>
|
||||
<screenshot>
|
||||
<screeninfo></screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="Kdenlive_Quickstart-Overlap-Clips.png" format="PNG"/>
|
||||
<imagedata fileref="kdenlive_quickstart-overlap-clips.png" format="PNG"/>
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>Overlapping clips</phrase>
|
||||
@@ -181,15 +204,18 @@
|
||||
<para>Overlapping clips</para>
|
||||
</caption>
|
||||
</mediaobject>
|
||||
</screenshot></para>
|
||||
<para>To add a <emphasis>transition</emphasis> between eating (the Spoon) and playing billard, the two clips need to overlap. To be precise: the second clip should be above or below the first one and end some frames after the second one begins. Zooming in until the ticks for simple frames appear helps there; it also makes it easy to always have the same transition duration, like five frames in this case.</para>
|
||||
<para>You can zoom in by either using the <guilabel>zoom slider</guilabel> at the bottom of the <application>Kdenlive</application> window, or with <keycombo>&Ctrl;<keycap>Mousewheel</keycap></keycombo>. <application>Kdenlive</application> will zoom to the timeline cursor, so first set it to the position which you want to see enlarged, then zoom in.</para>
|
||||
</screenshot>
|
||||
</para>
|
||||
<para>To add a <emphasis>transition</emphasis> between eating (the Spoon) and playing billiards, the two clips need to overlap. To be precise: the second clip should be above or below the first one and end some frames after the second one begins. Zooming in until the ticks for single frames appear helps here; it also makes it easy to always have the same transition duration, five frames in this case.
|
||||
</para>
|
||||
<para>You can zoom in by either using the <guilabel>zoom slider</guilabel> at the bottom of the &kdenlive; window, or with <keycombo>&Ctrl;<keycap>Mousewheel</keycap></keycombo>. &kdenlive; will zoom to the timeline cursor, so first set it to the position which you want to see enlarged, then zoom in.
|
||||
</para>
|
||||
<para>
|
||||
<screenshot>
|
||||
<screeninfo></screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="Kdenlive-Quickstart-Add-Transition.png" format="PNG"/>
|
||||
<imagedata fileref="kdenlive-quickstart-add-transition.png" format="PNG"/>
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>Transition marker</phrase>
|
||||
@@ -198,64 +224,67 @@
|
||||
<para>Transition marker</para>
|
||||
</caption>
|
||||
</mediaobject>
|
||||
</screenshot></para>
|
||||
<para>Now that the clips overlap, the transition can be added. This is done either by right-clicking on the upper clip and choosing <guilabel>Add Transition</guilabel> or, easier, by clicking the lower right corner of the Spoon clip. The latter by default adds a dissolve transition, which is in this case the best idea anyway since the Spoon is not required for playing anyway.</para>
|
||||
<para>The dissolve transitions fades the first clip into the second one.</para>
|
||||
</screenshot>
|
||||
</para>
|
||||
<para>Now that the clips overlap, the transition can be added. This is done either by right-clicking on the upper clip and choosing <guilabel>Add Transition</guilabel> or, easier, by clicking the green triangle that appears when you hover the mouse over the lower right corner of the Spoon clip. The latter, by default, adds a dissolve transition, which is in this case the best idea anyway since the Spoon is not required for playing.
|
||||
</para>
|
||||
<para>The dissolve transitions fades the first clip into the second one. See also <ulink url="http://userbase.kde.org/Special:myLanguage/Kdenlive/Manual/Transitions">Transition section of the manual</ulink>.
|
||||
</para>
|
||||
<para>
|
||||
<screenshot>
|
||||
<screeninfo></screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="Kdenlive-Quickstart-Add-Last-Clip.png" format="PNG"/>
|
||||
<imagedata fileref="kdenlive-quickstart-add-last-clip.png" format="PNG"/>
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase></phrase>
|
||||
</textobject>
|
||||
<caption>
|
||||
<para></para>
|
||||
</caption>
|
||||
</mediaobject>
|
||||
</screenshot></para>
|
||||
<para>Let’s add the last clip, the Piano, now, and again apply a dissolve transition. When adding it on the first track of the timeline, you need to click on the new clip’s lower left edge to add the transition to the previous clip.</para>
|
||||
<sect1 id="effects"><title>Effects</title>
|
||||
</screenshot>
|
||||
</para>
|
||||
<para>Let’s now add the last clip, the Piano, and again apply a dissolve transition. When adding it on the first track of the timeline, you need to click on the new clip’s lower left edge to add the transition to the previous clip.
|
||||
</para>
|
||||
<sect2 id="effects"><title>Effects</title>
|
||||
<para>
|
||||
<screenshot>
|
||||
<screeninfo></screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="Kdenlive_Quickstart-Add-Effect.png" format="PNG"/>
|
||||
<imagedata fileref="kdenlive_quickstart-add-effect.png" format="PNG"/>
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>Effects</phrase>
|
||||
<phrase>Effect List</phrase>
|
||||
</textobject>
|
||||
<caption>
|
||||
<para>Effects</para>
|
||||
<para>Effect List</para>
|
||||
</caption>
|
||||
</mediaobject>
|
||||
</screenshot></para>
|
||||
<para>The Piano can be colourized by adding an <emphasis>effect</emphasis> to it. Select the piano clip, then double-click the <guilabel>RGB Adjustment</guilabel> effect in the <guilabel>Effects</guilabel>. If it is not visible, you can get it via <menuchoice><guimenu>View</guimenu><guimenuitem>Effects</guimenuitem></menuchoice>.</para>
|
||||
</screenshot>
|
||||
</para>
|
||||
<para>The Piano can be colourized by adding an <emphasis>effect</emphasis> to it. Select the piano clip, then double-click the <guilabel>RGB Adjustment</guilabel> effect in the <guilabel>Effect List</guilabel>. If it is not visible, you can get it via <menuchoice><guimenu>View</guimenu><guimenuitem>Effect List</guimenuitem></menuchoice>.
|
||||
</para>
|
||||
<para>
|
||||
<screenshot>
|
||||
<screeninfo></screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="Kdenlive_Quickstart-Effect-Flag.png" format="PNG"/>
|
||||
<imagedata fileref="kdenlive_quickstart-effect-flag.png" format="PNG"/>
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase></phrase>
|
||||
</textobject>
|
||||
<caption>
|
||||
<para></para>
|
||||
</caption>
|
||||
</mediaobject>
|
||||
</screenshot></para>
|
||||
<para>Once the effect has been added, its name will be added to the timeline clip. It will also be shown in the <guilabel>Effect Stack</guilabel> widget.</para>
|
||||
</screenshot>
|
||||
</para>
|
||||
<para>Once the effect has been added, its name will be added to the timeline clip. It will also be shown in the <guilabel>Effect Stack</guilabel> widget.
|
||||
</para>
|
||||
<para>
|
||||
<screenshot>
|
||||
<screeninfo></screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="Kdenlive-Quickstart-EffectStack.png" format="PNG"/>
|
||||
<imagedata fileref="kdenlive-quickstart-effectstack.png" format="PNG"/>
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>Effect Stack with RGB adjustment</phrase>
|
||||
@@ -264,17 +293,22 @@
|
||||
<para>Effect Stack with RGB adjustment</para>
|
||||
</caption>
|
||||
</mediaobject>
|
||||
</screenshot></para>
|
||||
<para>To get a warm yellow-orange tone on the image, fitting the comfortable evening, blue needs to be reduced and red and green improved.</para>
|
||||
<para>The values in the effect stack widget can be changed by using the slider (middle mouse button resets it to the default value), or by entering a value directly by double-clicking the number right to the slider.</para>
|
||||
<para>Effects can also be added with the <guilabel>Add new effect</guilabel> icon (framed in the image on the left) in the <guilabel>Effect Stack</guilabel>; It always refers to the timeline clip that is currently selected. By unchecking the checkbox they are temporarily disabled (the settings remain though), this is ⪚ useful for effects that require a lot of computing power, so they can be disabled when editing and enabled again for rendering.</para>
|
||||
<para>For some effects, like the one used there, it is possible to add keyframes. The framed watch icon indicates this. Keyframes are used for changing effect parameters over time. In our clip this allows us to fade the piano’s colour from a warm evening colour to a cold night colour.</para>
|
||||
</screenshot>
|
||||
</para>
|
||||
<para>To get a warm yellow-orange tone on the image, fitting the comfortable evening, blue needs to be reduced and red and green improved.
|
||||
</para>
|
||||
<para>The values in the effect stack widget can be changed by using the slider (middle mouse button resets it to the default value), or by entering a value directly by double-clicking the number to the right of the slider.
|
||||
</para>
|
||||
<para>Effects can also be added with the <guilabel>Add new effect</guilabel> icon (framed in the image on the left) in the <guilabel>Effect Stack</guilabel>; It always refers to the timeline clip that is currently selected. By unchecking the checkbox they are temporarily disabled (the settings remain though), this is ⪚ useful for effects that require a lot of computing power, so they can be disabled when editing and enabled again for rendering.
|
||||
</para>
|
||||
<para>For some effects, like the one used there, it is possible to add keyframes. The framed watch icon indicates this. Keyframes are used for changing effect parameters over time. In our clip this allows us to fade the piano’s colour from a warm evening colour to a cold night colour.
|
||||
</para>
|
||||
<para>
|
||||
<screenshot>
|
||||
<screeninfo></screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="Kdenlive_Quickstart-Keyframes.png" format="PNG"/>
|
||||
<imagedata fileref="kdenlive_quickstart-keyframes.png" format="PNG"/>
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>Keyframes for effects</phrase>
|
||||
@@ -283,19 +317,26 @@
|
||||
<para>Keyframes for effects</para>
|
||||
</caption>
|
||||
</mediaobject>
|
||||
</screenshot></para>
|
||||
<para>After clicking the <guilabel>keyframe</guilabel> icon (the clock icon framed in the previous image), the Effect Stack widget will re-arrange. By default there will be two keyframes, one at the beginning of the timeline clip and one at the end. Move the timeline cursor to the end of the timeline clip, such that the project monitor actually shows the new colours when changing the parameters of the keyframe at the end.</para>
|
||||
<para>Make sure the last keyframe is selected in the Effect Stack’s list. Then you are ready to flood the piano with a deep blue.</para>
|
||||
<para>Moving the timeline cursor to the beginning of the project and playing it (with <keycap>Space</keycap>, or the <guilabel>Play</guilabel> button in the <guilabel>Project Monitor</guilabel>), the piano should now change the colour as desired.</para>
|
||||
<para>Keyframing was the hardest part of this tutorial. If you managed to do it, you will master <guilabel>Kdenlive</guilabel> easily!</para>
|
||||
</sect1>
|
||||
<sect1 id="music"><title>Music</title>
|
||||
</screenshot>
|
||||
</para>
|
||||
<para>After clicking the <guilabel>keyframe</guilabel> icon (the clock icon framed in the previous image), the Effect Stack widget will re-arrange. By default there will be two keyframes, one at the beginning of the timeline clip and one at the end. Move the timeline cursor to the end of the timeline clip, such that the project monitor actually shows the new colours when changing the parameters of the keyframe at the end.
|
||||
</para>
|
||||
<para>Make sure the last keyframe is selected in the Effect Stack’s list. Then you are ready to flood the piano with a deep blue.
|
||||
</para>
|
||||
<para>Moving the timeline cursor to the beginning of the project and playing it (with <keycap>Space</keycap>, or the <guilabel>Play</guilabel> button in the <guilabel>Project Monitor</guilabel>), the piano should now change the colour as desired.
|
||||
</para>
|
||||
<para>Keyframing was the hardest part of this tutorial. If you managed to do it, you will master &kdenlive; easily!
|
||||
</para>
|
||||
<para>See also <link linkend="effects">Effects section of the manual</link>.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2 id="music"><title>Music</title>
|
||||
<para>
|
||||
<screenshot>
|
||||
<screeninfo></screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="Kdenlive_Quickstart-Fadeout.png" format="PNG"/>
|
||||
<imagedata fileref="kdenlive_quickstart-fadeout.png" format="PNG"/>
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>Audio fadeout</phrase>
|
||||
@@ -304,18 +345,21 @@
|
||||
<para>Audio fadeout</para>
|
||||
</caption>
|
||||
</mediaobject>
|
||||
</screenshot></para>
|
||||
<para>Since the clips do not provide any audio, let’s search for some nice piece of music, on your local collection or on web pages like <ulink url="http://www.jamendo.com">Jamendo</ulink>. The audio clip should, after adding it, go to an audio track on the timeline.</para>
|
||||
<para>The audio clip can be resized on the timeline the same way as video clips are. The cursor will snap in at the end of the project automatically. To add a fade out effect at the end of the audio clip (except if you found a file with exactly the right length) you can hover the top right (or left) edge of the timeline clip and drag the green disc to the position where fading out should start.<footnote><para>This green disc is a shorthand for adding the effect <menuchoice><guimenu>Fade</guimenu><guimenuitem>Fade out</guimenuitem></menuchoice>. Both ways lead to the same result.</para></footnote></para>
|
||||
</screenshot>
|
||||
</para>
|
||||
<para>Since the clips do not provide any audio, let’s search for some nice piece of music, from your local collection or on web pages like <ulink url="http://www.jamendo.com">Jamendo</ulink>. The audio clip should, after adding it, be dragged to an audio track on the timeline.
|
||||
</para>
|
||||
<para>The audio clip can be resized on the timeline the same way as video clips are. The cursor will snap in at the end of the project automatically. To add a fade out effect at the end of the audio clip (except if you found a file with exactly the right length) you can hover the top right (or left) edge of the timeline clip and drag the green disc to the position where fading out should start.<footnote><para>This green disc is a shorthand for adding the effect <menuchoice><guimenu>Fade</guimenu><guimenuitem>Fade out</guimenuitem></menuchoice>. Both ways lead to the same result.</para></footnote>
|
||||
</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
</chapter>
|
||||
<chapter id="rendering"><title>Rendering</title>
|
||||
<sect1 id="rendering"><title>Rendering</title>
|
||||
<para>
|
||||
<screenshot>
|
||||
<screeninfo></screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="Kdenlive_Quickstart-Renderer.png" format="PNG"/>
|
||||
<imagedata fileref="kdenlive_quickstart-renderer.png" format="PNG"/>
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>Rendering dialog</phrase>
|
||||
@@ -324,14 +368,16 @@
|
||||
<para>Rendering dialog</para>
|
||||
</caption>
|
||||
</mediaobject>
|
||||
</screenshot></para>
|
||||
<para>A few minutes left, and the project is finished! Click the Render button (or go to <menuchoice><guimenu>Project</guimenu><guimenuitem>Render</guimenuitem></menuchoice>, or press <keycombo>&Ctrl;&Enter;</keycombo>) to get the dialog shown on the left. Select the desired output file for our new video with all effects and transitions, choose MPEG4 (works nearly everywhere) and a bitrate of 2000k (the higher the bitrate, the larger the output file and the better the quality – but since the bitrate for the input clips was 2000k already, using a higher one would not improve quality and is therefore unnecessary), and press the <emphasis>Render to File</emphasis> button.</para>
|
||||
</screenshot>
|
||||
</para>
|
||||
<para>A few minutes left, and the project is finished! Click the Render button (or go to <menuchoice><guimenu>Project</guimenu><guimenuitem>Render</guimenuitem></menuchoice>, or press <keycombo>&Ctrl;&Enter;</keycombo>) to get the dialog shown on the left. Select the desired output file for our new video with all effects and transitions, choose MPEG4 (works nearly everywhere) and a bitrate of 2000k (the higher the bitrate, the larger the output file and the better the quality – but since the bitrate for the input clips was 2000k already, using a higher one would not improve quality and is therefore unnecessary), and press the <guilabel>Render to File</guilabel> button.
|
||||
</para>
|
||||
<para>
|
||||
<screenshot>
|
||||
<screeninfo></screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="Kdenlive_Quickstart-Rendering.png" format="PNG"/>
|
||||
<imagedata fileref="kdenlive_quickstart-rendering.png" format="PNG"/>
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>Rendering progress</phrase>
|
||||
@@ -340,8 +386,31 @@
|
||||
<para>Rendering progress</para>
|
||||
</caption>
|
||||
</mediaobject>
|
||||
</screenshot></para>
|
||||
<para>After some seconds rendering will be finished, and your first <application>Kdenlive</application> project completed. Congratulations!</para>
|
||||
</screenshot>
|
||||
</para>
|
||||
<para>After some seconds rendering will be finished, and your first &kdenlive; project completed. Congratulations!
|
||||
</para>
|
||||
<screenshot>
|
||||
<screeninfo></screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="kdenlive_quickstart-rendering.png" format="PNG"/>
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>Rendering progress</phrase>
|
||||
</textobject>
|
||||
<caption>
|
||||
<para>Rendering progress</para>
|
||||
</caption>
|
||||
</mediaobject>
|
||||
</screenshot>
|
||||
</sect1>
|
||||
<sect1>
|
||||
<title>Complete manual</title>
|
||||
<para>Further documentation for the current version of &kdenlive; can be found in <ulink url="http://userbase.kde.org/Special:myLanguage/Kdenlive/Manual">the full manual</ulink>.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
||||
|
||||
<!--userbase-content-->
|
||||
|
||||
BIN
doc/kdenlive-quickstart-add-last-clip.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
doc/kdenlive-quickstart-add-transition.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
doc/kdenlive-quickstart-effectstack.png
Normal file
|
After Width: | Height: | Size: 199 KiB |
BIN
doc/kdenlive_quickstart-add-clips.png
Normal file
|
After Width: | Height: | Size: 9.8 KiB |
BIN
doc/kdenlive_quickstart-add-effect.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
doc/kdenlive_quickstart-effect-flag.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
doc/kdenlive_quickstart-fadeout.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
doc/kdenlive_quickstart-folder-structure.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
doc/kdenlive_quickstart-keyframes.png
Normal file
|
After Width: | Height: | Size: 215 KiB |
BIN
doc/kdenlive_quickstart-mainwindow.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
doc/kdenlive_quickstart-new-project.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
doc/kdenlive_quickstart-overlap-clips.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
doc/kdenlive_quickstart-renderer.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
doc/kdenlive_quickstart-rendering.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
doc/kdenlive_quickstart-resize-marker.png
Normal file
|
After Width: | Height: | Size: 8.7 KiB |
BIN
doc/kdenlive_quickstart-save-project.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
doc/kdenlive_quickstart-timeline-clips.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
doc/kdenlive_quickstart-timelinecursor.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
1
kdenlive.categories
Normal file
@@ -0,0 +1 @@
|
||||
org.kde.multimedia.kdenlive kdenlive (kdenlive)
|
||||
487
packaging/appimage/01-dependencies.sh
Executable file
@@ -0,0 +1,487 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Halt on errors
|
||||
set -e
|
||||
|
||||
# Be verbose
|
||||
set -x
|
||||
|
||||
# Now we are inside CentOS 6
|
||||
grep -r "CentOS release 6" /etc/redhat-release || exit 1
|
||||
|
||||
CPU_CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
|
||||
|
||||
if [[ $CPU_CORES -gt 1 ]]; then
|
||||
CPU_CORES=$((CPU_CORES-1))
|
||||
fi
|
||||
|
||||
echo "CPU Cores to use : $CPU_CORES"
|
||||
|
||||
# Determine which architecture should be built
|
||||
if [[ "$(arch)" = "i686" || "$(arch)" = "x86_64" ]] ; then
|
||||
ARCH=$(arch)
|
||||
else
|
||||
echo "Architecture could not be determined"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f /etc/yum.repos.d/epel.repo ]] ; then
|
||||
|
||||
yum -y install epel-release
|
||||
|
||||
# we need to be up to date in order to install the xcb-keysyms dependency
|
||||
yum -y update
|
||||
fi
|
||||
|
||||
# Required for GAVL install (used in frei0r crop,scale,tilt effect)
|
||||
if [[ ! -f /etc/yum.repos.d/linuxtech.repo ]] ; then
|
||||
cat > /etc/yum.repos.d/linuxtech.repo << 'EOF'
|
||||
[linuxtech]
|
||||
name=LinuxTECH
|
||||
baseurl=http://pkgrepo.linuxtech.net/el6/release/
|
||||
enabled=1
|
||||
gpgcheck=1
|
||||
gpgkey=http://pkgrepo.linuxtech.net/el6/release/RPM-GPG-KEY-LinuxTECH.NET
|
||||
EOF
|
||||
yum -y update
|
||||
fi
|
||||
|
||||
# gettext
|
||||
|
||||
# Packages for base dependencies and Qt5.
|
||||
yum -y install wget \
|
||||
tar \
|
||||
bzip2 \
|
||||
xz \
|
||||
subversion \
|
||||
libtool \
|
||||
which \
|
||||
fuse \
|
||||
automake \
|
||||
mesa-libEGL \
|
||||
cmake3 \
|
||||
gcc-c++ \
|
||||
patch \
|
||||
libxcb \
|
||||
xcb-util \
|
||||
xkeyboard-config \
|
||||
gperf \
|
||||
bison \
|
||||
flex \
|
||||
zlib-devel \
|
||||
expat-devel \
|
||||
fuse-devel \
|
||||
libtool-ltdl-devel \
|
||||
glib2-devel \
|
||||
glibc-headers \
|
||||
mysql-devel \
|
||||
eigen3-devel \
|
||||
openssl-devel \
|
||||
cppunit-devel \
|
||||
libstdc++-devel \
|
||||
freetype-devel \
|
||||
fontconfig-devel \
|
||||
libxml2-devel \
|
||||
libstdc++-devel \
|
||||
libXrender-devel \
|
||||
lcms2-devel \
|
||||
xcb-util-keysyms-devel \
|
||||
libXi-devel \
|
||||
mesa-libGL-devel \
|
||||
mesa-libGLU-devel \
|
||||
libxcb-devel \
|
||||
xcb-util-devel \
|
||||
glibc-devel \
|
||||
libudev-devel \
|
||||
libicu-devel \
|
||||
sqlite-devel \
|
||||
libusb-devel \
|
||||
libexif-devel \
|
||||
libical-devel \
|
||||
libxslt-devel \
|
||||
xz-devel \
|
||||
lz4-devel \
|
||||
inotify-tools-devel \
|
||||
cups-devel \
|
||||
openal-soft-devel \
|
||||
pixman-devel \
|
||||
polkit-devel \
|
||||
perl-ExtUtils-MakeMaker \
|
||||
curl-devel \
|
||||
pulseaudio-libs-devel \
|
||||
libgavl-devel \
|
||||
sox-devel \
|
||||
fftw-devel \
|
||||
perl-List-MoreUtils \
|
||||
perl-XML-Parser \
|
||||
jack-audio-connection-kit-devel \
|
||||
ladspa-devel
|
||||
|
||||
if ( !test -d /usr/bin/cmake ) ; then
|
||||
ln -s /usr/bin/cmake3 /usr/bin/cmake
|
||||
fi
|
||||
|
||||
# Newer compiler than what comes with offcial CentOS 6 (only 64 bits)
|
||||
yum -y install centos-release-scl-rh
|
||||
yum -y install devtoolset-3-gcc devtoolset-3-gcc-c++
|
||||
|
||||
# required for Kdenlive related libs
|
||||
yum -y install libXft-devel atk-devel libXcomposite-devel
|
||||
|
||||
# Get helper functions
|
||||
wget -q https://github.com/probonopd/AppImages/raw/master/functions.sh -O ./functions.sh
|
||||
. ./functions.sh
|
||||
rm -f functions.sh
|
||||
|
||||
echo -e "---------- Clean-up Old Packages\n"
|
||||
|
||||
# Remove system based devel package to prevent conflict with new one.
|
||||
yum -y erase boost-devel libgphoto2 sane-backends libjpeg-devel jasper-devel libpng-devel libtiff-devel git
|
||||
|
||||
# Prepare the install location
|
||||
# rm -rf /app/ || true
|
||||
mkdir -p /app/usr
|
||||
mkdir -p /external/build
|
||||
mkdir -p /external/download
|
||||
|
||||
export LLVM_ROOT=/opt/llvm/
|
||||
|
||||
# make sure lib and lib64 are the same thing
|
||||
mkdir -p /app/usr/lib
|
||||
cd /app/usr
|
||||
rm -Rf lib64
|
||||
ln -s lib lib64
|
||||
|
||||
QTVERSION=5.9.4
|
||||
QVERSION_SHORT=5.9
|
||||
QTDIR=/usr/local/Qt-${QTVERSION}/
|
||||
|
||||
# Use the new compiler
|
||||
. /opt/rh/devtoolset-3/enable
|
||||
|
||||
BUILDING_DIR="/external/build"
|
||||
DOWNLOAD_DIR="/external/download"
|
||||
|
||||
# install recent git
|
||||
if [ ! -d /external/git-2.7.4 ]; then
|
||||
cd /external
|
||||
wget https://www.kernel.org/pub/software/scm/git/git-2.7.4.tar.gz
|
||||
tar xzf git-2.7.4.tar.gz
|
||||
fi
|
||||
cd /external/git-2.7.4
|
||||
make prefix=/usr/local/git all
|
||||
make prefix=/usr/local/git install
|
||||
echo 'export PATH=$PATH:/usr/local/git/bin' >> /etc/bashrc
|
||||
source /etc/bashrc
|
||||
|
||||
cd $BUILDING_DIR
|
||||
|
||||
rm -rf $BUILDING_DIR/* || true
|
||||
|
||||
cmake3 /kdenlive/packaging/appimage/3rdparty \
|
||||
-DCMAKE_INSTALL_PREFIX:PATH=/usr \
|
||||
-DINSTALL_ROOT=/usr \
|
||||
-DEXTERNALS_DOWNLOAD_DIR=$DOWNLOAD_DIR
|
||||
|
||||
cmake3 --build . --config RelWithDebInfo --target ext_jpeg -- -j$CPU_CORES
|
||||
cmake3 --build . --config RelWithDebInfo --target ext_jasper -- -j$CPU_CORES
|
||||
cmake3 --build . --config RelWithDebInfo --target ext_png -- -j$CPU_CORES
|
||||
cmake3 --build . --config RelWithDebInfo --target ext_tiff -- -j$CPU_CORES
|
||||
#cmake3 --build . --config RelWithDebInfo --target ext_opencv -- -j$CPU_CORES
|
||||
cmake3 --build . --config RelWithDebInfo --target ext_qt -- -j$CPU_CORES
|
||||
cmake3 --build . --config RelWithDebInfo --target ext_exiv2 -- -j$CPU_CORES
|
||||
|
||||
|
||||
#gettext
|
||||
cd /external
|
||||
if ( test -d /external/gettext-0.18.3 )
|
||||
then
|
||||
echo "gettext already downloaded"
|
||||
else
|
||||
wget http://ftp.gnu.org/pub/gnu/gettext/gettext-0.18.3.tar.gz
|
||||
tar -xf gettext-0.18.3.tar.gz
|
||||
fi
|
||||
cd gettext-0.18.3
|
||||
./configure --prefix=/usr
|
||||
make -j5
|
||||
make install
|
||||
|
||||
#necessary ?
|
||||
#pulseaudio-libs
|
||||
|
||||
# qjsonparser, used to add metadata to the plugins needs to work in a en_US.UTF-8 environment. That's
|
||||
# not always set correctly in CentOS 6.7
|
||||
export LC_ALL=en_US.UTF-8
|
||||
export LANG=en_us.UTF-8
|
||||
|
||||
|
||||
# Make sure we build from the /, parts of this script depends on that. We also need to run as root...
|
||||
cd /
|
||||
|
||||
# TO-DO ask about this.
|
||||
export CMAKE_PREFIX_PATH=$QTDIR:/app/share/llvm/
|
||||
|
||||
#update cmake https://xinyustudio.wordpress.com/2014/06/18/how-to-install-cmake-3-0-on-centos-6-centos-7/
|
||||
#export PATH=/usr/local/cmake-3.0.0/bin:$PATH
|
||||
|
||||
# if the library path doesn't point to our usr/lib, linking will be broken and we won't find all deps either
|
||||
export LD_LIBRARY_PATH=/usr/lib64/:/usr/lib:/app/usr/lib:$QTDIR/lib/:/opt/python3.5/lib/:$LD_LIBRARY_PATH
|
||||
|
||||
# start building the deps
|
||||
|
||||
function build_external
|
||||
{ (
|
||||
# errors fatal
|
||||
echo "Compiler version:" $(g++ --version)
|
||||
set -e
|
||||
|
||||
SRC=/external
|
||||
BUILD=/external/build
|
||||
PREFIX=/app/usr/
|
||||
|
||||
# framework
|
||||
EXTERNAL=$1
|
||||
|
||||
# clone if not there
|
||||
mkdir -p $SRC
|
||||
cd $SRC
|
||||
if ( test -d $EXTERNAL )
|
||||
then
|
||||
echo "$EXTERNAL already cloned"
|
||||
cd $EXTERNAL
|
||||
git reset --hard
|
||||
git pull --rebase
|
||||
cd ..
|
||||
else
|
||||
git clone $EXTERNAL_ADDRESS
|
||||
fi
|
||||
|
||||
# create build dir
|
||||
mkdir -p $BUILD/$EXTERNAL
|
||||
|
||||
# go there
|
||||
cd $BUILD/$EXTERNAL
|
||||
|
||||
# cmake it
|
||||
if ( $EXTERNAL_CMAKE )
|
||||
then
|
||||
cmake3 -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX $2 $SRC/$EXTERNAL
|
||||
else
|
||||
$EXTERNAL_CONFIGURE
|
||||
fi
|
||||
# make
|
||||
make -j8
|
||||
|
||||
# install
|
||||
make install
|
||||
) }
|
||||
|
||||
|
||||
export WLD=/app/usr/ # change this to another location if you prefer
|
||||
export LD_LIBRARY_PATH=$WLD/lib:$LD_LIBRARY_PATH
|
||||
export PKG_CONFIG_PATH=$WLD/lib/pkgconfig/:$WLD/share/pkgconfig/:/usr/lib/pkgconfig/:$PKG_CONFIG_PATH
|
||||
export PATH=$WLD/bin:$PATH
|
||||
export ACLOCAL_PATH=$WLD/share/aclocal
|
||||
export ACLOCAL="aclocal -I $ACLOCAL_PATH"
|
||||
|
||||
#yasm
|
||||
IN=yasm,https://github.com/yasm/yasm.git,true,""
|
||||
IFS=',' read -a external_options <<< $IN
|
||||
EXTERNAL="${external_options[0]}"
|
||||
EXTERNAL_ADDRESS="${external_options[1]}"
|
||||
EXTERNAL_CMAKE="${external_options[2]}"
|
||||
EXTERNAL_CONFIGURE="${external_options[3]}"
|
||||
build_external $EXTERNAL
|
||||
|
||||
#nasm
|
||||
cd /external
|
||||
if ( test -d /external/nasm-2.13.02 )
|
||||
then
|
||||
echo "nasm already downloaded"
|
||||
else
|
||||
wget http://www.nasm.us/pub/nasm/releasebuilds/2.13.02/nasm-2.13.02.tar.xz
|
||||
tar -xf nasm-2.13.02.tar.xz
|
||||
fi
|
||||
cd nasm-2.13.02
|
||||
./configure --prefix=$WLD
|
||||
make -j5
|
||||
make install
|
||||
|
||||
|
||||
#libsndfile
|
||||
cd /external
|
||||
if ( test -d /external/libsndfile-1.0.28 )
|
||||
then
|
||||
echo "libsndfile already downloaded"
|
||||
else
|
||||
wget http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.28.tar.gz
|
||||
tar -xf libsndfile-1.0.28.tar.gz
|
||||
fi
|
||||
cd libsndfile-1.0.28
|
||||
./configure --prefix=$WLD
|
||||
make -j5
|
||||
make install
|
||||
|
||||
#libsamplerate
|
||||
cd /external
|
||||
if ( test -d /external/libsamplerate-0.1.9 )
|
||||
then
|
||||
echo "libsamplerate already downloaded"
|
||||
else
|
||||
wget http://www.mega-nerd.com/SRC/libsamplerate-0.1.9.tar.gz
|
||||
tar -xf libsamplerate-0.1.9.tar.gz
|
||||
fi
|
||||
cd libsamplerate-0.1.9
|
||||
./configure --prefix=$WLD
|
||||
make -j5
|
||||
make install
|
||||
|
||||
|
||||
#alsa-lib
|
||||
cd /external
|
||||
if ( test -d /external/alsa-lib-1.1.5 )
|
||||
then
|
||||
echo "alsa-lib already downloaded"
|
||||
else
|
||||
wget ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.1.5.tar.bz2
|
||||
tar -xf alsa-lib-1.1.5.tar.bz2
|
||||
fi
|
||||
cd alsa-lib-1.1.5
|
||||
./configure --prefix=$WLD
|
||||
make -j5
|
||||
make install
|
||||
|
||||
#sdl
|
||||
cd /external
|
||||
if ( test -d /external/SDL2-2.0.7 )
|
||||
then
|
||||
echo "SDL already downloaded"
|
||||
else
|
||||
wget http://libsdl.org/release/SDL2-2.0.7.tar.gz
|
||||
tar -xf SDL2-2.0.7.tar.gz
|
||||
fi
|
||||
cd /external/SDL2-2.0.7
|
||||
./configure --prefix=$WLD --with-alsa-prefix=/app/usr/lib --with-alsa-inc-prefix=/app/usr/include/
|
||||
make
|
||||
make install
|
||||
|
||||
|
||||
function build_framework
|
||||
{ (
|
||||
# errors fatal
|
||||
echo "Compiler version:" $(g++ --version)
|
||||
set -e
|
||||
|
||||
SRC=/kf5
|
||||
BUILD=/kf5/build
|
||||
PREFIX=/app/usr/
|
||||
|
||||
# framework
|
||||
FRAMEWORK=$1
|
||||
|
||||
# clone if not there
|
||||
mkdir -p $SRC
|
||||
cd $SRC
|
||||
if ( test -d $FRAMEWORK )
|
||||
then
|
||||
echo "$FRAMEWORK already cloned"
|
||||
cd $FRAMEWORK
|
||||
if [ "$FRAMEWORK" = "polkit-qt-1" ] || [ "$FRAMEWORK" = "breeze" ] || [ "$FRAMEWORK" = "kdecoration" ]; then
|
||||
git checkout .
|
||||
git checkout master
|
||||
git reset --hard
|
||||
git pull --rebase
|
||||
elif [ "$FRAMEWORK" = "knotifications" ]; then
|
||||
git checkout .
|
||||
git checkout master
|
||||
git fetch --tags
|
||||
git checkout v5.45.0
|
||||
else
|
||||
git fetch --tags
|
||||
git checkout v5.45.0
|
||||
fi
|
||||
#git checkout master
|
||||
#git reset --hard
|
||||
#git pull --rebase
|
||||
cd ..
|
||||
else
|
||||
git clone git://anongit.kde.org/$FRAMEWORK
|
||||
cd $FRAMEWORK
|
||||
if [ "$FRAMEWORK" = "polkit-qt-1" ] || [ "$FRAMEWORK" = "breeze" ] || [ "$FRAMEWORK" = "kdecoration" ]; then
|
||||
git checkout master
|
||||
git reset --hard
|
||||
git pull --rebase
|
||||
elif [ "$FRAMEWORK" = "knotifications" ]; then
|
||||
git reset --hard
|
||||
git fetch --tags
|
||||
git checkout v5.45.0
|
||||
else
|
||||
git fetch --tags
|
||||
git checkout v5.45.0
|
||||
fi
|
||||
cd ..
|
||||
fi
|
||||
|
||||
if [ "$FRAMEWORK" = "knotifications" ]; then
|
||||
cd $FRAMEWORK
|
||||
echo "patching knotifications"
|
||||
cat > no_phonon.patch << EOF
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 0104c73..de44e9a 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -59,11 +59,11 @@ find_package(KF5Config ${KF5_DEP_VERSION} REQUIRED)
|
||||
find_package(KF5Codecs ${KF5_DEP_VERSION} REQUIRED)
|
||||
find_package(KF5CoreAddons ${KF5_DEP_VERSION} REQUIRED)
|
||||
|
||||
-find_package(Phonon4Qt5 4.6.60 REQUIRED NO_MODULE)
|
||||
-set_package_properties(Phonon4Qt5 PROPERTIES
|
||||
- DESCRIPTION "Qt-based audio library"
|
||||
- TYPE REQUIRED
|
||||
- PURPOSE "Required to build audio notification support")
|
||||
+#find_package(Phonon4Qt5 4.6.60 REQUIRED NO_MODULE)
|
||||
+#set_package_properties(Phonon4Qt5 PROPERTIES
|
||||
+# DESCRIPTION "Qt-based audio library"
|
||||
+# TYPE REQUIRED
|
||||
+# PURPOSE "Required to build audio notification support")
|
||||
if (Phonon4Qt5_FOUND)
|
||||
add_definitions(-DHAVE_PHONON4QT5)
|
||||
endif()
|
||||
EOF
|
||||
cat no_phonon.patch |patch -p1
|
||||
cd ..
|
||||
fi
|
||||
|
||||
# create build dir
|
||||
mkdir -p $BUILD/$FRAMEWORK
|
||||
|
||||
# go there
|
||||
cd $BUILD/$FRAMEWORK
|
||||
|
||||
# cmake it
|
||||
cmake3 -DBUILD_TESTING:BOOL=OFF -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX $2 $SRC/$FRAMEWORK > /tmp/$FRAMEWORK.log
|
||||
|
||||
# make
|
||||
make -j8
|
||||
|
||||
# install
|
||||
make install
|
||||
) }
|
||||
|
||||
|
||||
#TO-DO script these extras
|
||||
build_framework extra-cmake-modules "-DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON"
|
||||
#Cmake is too old on centos6.... so does this mean no sound for KDE apps? blech.
|
||||
#build_framework phonon -DPHONON_BUILD_PHONON4QT5=ON
|
||||
|
||||
for FRAMEWORK in karchive kconfig kwidgetsaddons kcompletion kcoreaddons polkit-qt-1 kauth kcodecs ki18n kdoctools kguiaddons kconfigwidgets kwindowsystem kcrash kdbusaddons kitemviews kiconthemes kjobwidgets kservice solid sonnet ktextwidgets attica kglobalaccel kxmlgui kbookmarks knotifications kio knotifyconfig knewstuff kpackage kdeclarative ; do
|
||||
build_framework $FRAMEWORK "-DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON"
|
||||
done
|
||||
build_framework breeze-icons "-DBINARY_ICONS_RESOURCE=1 -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON"
|
||||
build_framework kdecoration "-DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON"
|
||||
build_framework breeze "-DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON"
|
||||
|
||||
cd ..
|
||||
|
||||
echo "+++++++++++++\n BUILDING FRAMEWORKS DONE \n+++++++++++++++"
|
||||
|
||||
409
packaging/appimage/02-avlibs.sh
Executable file
@@ -0,0 +1,409 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Halt on errors
|
||||
set -e
|
||||
|
||||
# Be verbose
|
||||
set -x
|
||||
|
||||
# Now we are inside CentOS 6
|
||||
grep -r "CentOS release 6" /etc/redhat-release || exit 1
|
||||
|
||||
. /opt/rh/devtoolset-3/enable
|
||||
|
||||
#necessary ?
|
||||
#pulseaudio-libs
|
||||
|
||||
QTVERSION=5.9.4
|
||||
QVERSION_SHORT=5.9
|
||||
QTDIR=/usr/local/Qt-${QTVERSION}/
|
||||
|
||||
# qjsonparser, used to add metadata to the plugins needs to work in a en_US.UTF-8 environment. That's
|
||||
# not always set correctly in CentOS 6.7
|
||||
export LC_ALL=en_US.UTF-8
|
||||
export LANG=en_us.UTF-8
|
||||
|
||||
# Determine which architecture should be built
|
||||
if [[ "$(arch)" = "i686" || "$(arch)" = "x86_64" ]] ; then
|
||||
ARCH=$(arch)
|
||||
else
|
||||
echo "Architecture could not be determined"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Make sure we build from the /, parts of this script depends on that. We also need to run as root...
|
||||
cd /
|
||||
|
||||
# TO-DO ask about this.
|
||||
export CMAKE_PREFIX_PATH=$QTDIR:/app/share/llvm/
|
||||
|
||||
# if the library path doesn't point to our usr/lib, linking will be broken and we won't find all deps either
|
||||
export LD_LIBRARY_PATH=/usr/lib64/:/usr/lib:/app/usr/lib:$QTDIR/lib/:/opt/python3.5/lib/:$LD_LIBRARY_PATH
|
||||
#export LD_LIBRARY_PATH=/usr/lib64/:/usr/lib:/app/usr/lib:$QTDIR/lib/:$LD_LIBRARY_PATH
|
||||
|
||||
# Prepare the install location
|
||||
#rm -rf /app/ || true
|
||||
mkdir -p /app/usr
|
||||
|
||||
# export LLVM_ROOT=/opt/llvm/
|
||||
|
||||
# start building the deps
|
||||
|
||||
function build_external
|
||||
{ (
|
||||
# errors fatal
|
||||
echo "Compiler version:" $(g++ --version)
|
||||
set -e
|
||||
|
||||
SRC=/external
|
||||
BUILD=/external/build
|
||||
PREFIX=/app/usr/
|
||||
|
||||
# framework
|
||||
EXTERNAL=$1
|
||||
|
||||
# clone if not there
|
||||
mkdir -p $SRC
|
||||
cd $SRC
|
||||
if ( test -d $EXTERNAL )
|
||||
then
|
||||
echo "$EXTERNAL already cloned"
|
||||
if [ $# -eq 0 ]; then
|
||||
cd $EXTERNAL
|
||||
git reset --hard
|
||||
git pull --rebase
|
||||
cd ..
|
||||
fi
|
||||
else
|
||||
git clone $EXTERNAL_ADDRESS
|
||||
fi
|
||||
|
||||
# create build dir
|
||||
mkdir -p $BUILD/$EXTERNAL
|
||||
|
||||
# go there
|
||||
cd $BUILD/$EXTERNAL
|
||||
|
||||
# cmake it
|
||||
if ( $EXTERNAL_CMAKE )
|
||||
then
|
||||
cmake3 -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX $2 $SRC/$EXTERNAL
|
||||
else
|
||||
$EXTERNAL_CONFIGURE
|
||||
fi
|
||||
make -j8
|
||||
|
||||
# install
|
||||
make install
|
||||
) }
|
||||
|
||||
|
||||
export WLD=/app/usr/ # change this to another location if you prefer
|
||||
export LD_LIBRARY_PATH=$WLD/lib:$LD_LIBRARY_PATH
|
||||
export PKG_CONFIG_PATH=$WLD/lib/pkgconfig/:$WLD/share/pkgconfig/:/usr/lib/pkgconfig/:$PKG_CONFIG_PATH
|
||||
export PATH=$WLD/bin:$PATH
|
||||
export ACLOCAL_PATH=$WLD/share/aclocal
|
||||
export ACLOCAL="aclocal -I $ACLOCAL_PATH"
|
||||
|
||||
#libsndfile
|
||||
cd /external
|
||||
if ( test -d /external/libsndfile-1.0.28 )
|
||||
then
|
||||
echo "libsndfile already downloaded"
|
||||
else
|
||||
wget http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.28.tar.gz
|
||||
tar -xf libsndfile-1.0.28.tar.gz
|
||||
fi
|
||||
cd libsndfile-1.0.28
|
||||
./configure --prefix=$WLD
|
||||
make -j5
|
||||
make install
|
||||
|
||||
#libsamplerate
|
||||
cd /external
|
||||
if ( test -d /external/libsamplerate-0.1.9 )
|
||||
then
|
||||
echo "libsamplerate already downloaded"
|
||||
else
|
||||
wget http://www.mega-nerd.com/SRC/libsamplerate-0.1.9.tar.gz
|
||||
tar -xf libsamplerate-0.1.9.tar.gz
|
||||
fi
|
||||
cd libsamplerate-0.1.9
|
||||
./configure --prefix=$WLD
|
||||
make -j5
|
||||
make install
|
||||
|
||||
#ladspa-plugins (shw)
|
||||
cd /external
|
||||
if ( test -d /external/ladspa )
|
||||
then
|
||||
echo "ladspa already downloaded, on failure, replace AC_CONFIG_MACRO_DIRS([m4]) with AC_CONFIG_MACRO_DIR([m4])"
|
||||
cd ladspa
|
||||
git reset --hard
|
||||
git pull --rebase
|
||||
cd ..
|
||||
else
|
||||
git clone https://github.com/swh/ladspa.git
|
||||
fi
|
||||
cd ladspa
|
||||
echo "Readying ladspa, on failure, replace AC_CONFIG_MACRO_DIRS([m4]) with AC_CONFIG_MACRO_DIR([m4]) in configure.ac"
|
||||
autoreconf -i
|
||||
./configure --prefix=$WLD
|
||||
make -j5
|
||||
make install
|
||||
|
||||
|
||||
#alsa-lib
|
||||
cd /external
|
||||
if ( test -d /external/alsa-lib-1.1.5 )
|
||||
then
|
||||
echo "alsa-lib already downloaded"
|
||||
else
|
||||
wget ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.1.5.tar.bz2
|
||||
tar -xf alsa-lib-1.1.5.tar.bz2
|
||||
fi
|
||||
cd alsa-lib-1.1.5
|
||||
./configure --prefix=$WLD
|
||||
make -j5
|
||||
make install
|
||||
|
||||
|
||||
#libx264
|
||||
cd /external
|
||||
if ( test -d /external/x264 )
|
||||
then
|
||||
echo "libx264 already cloned"
|
||||
if [ $# -eq 0 ]; then
|
||||
cd x264
|
||||
git reset --hard
|
||||
git pull --rebase
|
||||
cd ..
|
||||
fi
|
||||
# make distclean
|
||||
else
|
||||
#git clone git://git.videolan.org/x264.git
|
||||
git clone https://anonscm.debian.org/git/pkg-multimedia/x264.git
|
||||
fi
|
||||
cd x264
|
||||
./configure --enable-static --enable-shared --prefix=$WLD
|
||||
make -j5
|
||||
make install
|
||||
|
||||
|
||||
#libx265
|
||||
cd /external
|
||||
if ( test -d /external/x265 )
|
||||
then
|
||||
echo "libx265 already downloaded"
|
||||
cd x265
|
||||
if [ $# -eq 0 ]; then
|
||||
git reset --hard
|
||||
git pull --rebase
|
||||
fi
|
||||
cd build/linux
|
||||
# make distclean
|
||||
else
|
||||
git clone https://anonscm.debian.org/git/pkg-multimedia/x265.git
|
||||
cd x265/build/linux
|
||||
fi
|
||||
cmake3 -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$WLD" -DENABLE_PIC=ON -DENABLE_SHARED=OFF ../../source
|
||||
make -j5
|
||||
make install
|
||||
|
||||
#libvpx
|
||||
cd /external
|
||||
if ( test -d /external/libvpx )
|
||||
then
|
||||
echo "libvpx already cloned"
|
||||
if [ $# -eq 0 ]; then
|
||||
cd libvpx
|
||||
git reset --hard
|
||||
git pull --rebase
|
||||
cd ..
|
||||
fi
|
||||
#make clean
|
||||
else
|
||||
git clone https://anonscm.debian.org/git/pkg-multimedia/libvpx.git
|
||||
fi
|
||||
cd libvpx
|
||||
./configure --enable-static --as=yasm --enable-shared --prefix=$WLD
|
||||
make -j5
|
||||
make install
|
||||
|
||||
#ffmpeg
|
||||
cd /external
|
||||
if ( test -d /external/ffmpeg )
|
||||
then
|
||||
echo "ffmpeg already cloned"
|
||||
if [ $# -eq 0 ]; then
|
||||
cd ffmpeg
|
||||
git reset --hard
|
||||
# git pull --rebase
|
||||
git checkout debian/7%3.3.4-2
|
||||
cd ..
|
||||
fi
|
||||
else
|
||||
# git clone https://git.ffmpeg.org/ffmpeg.git
|
||||
# Use debian source
|
||||
git clone https://anonscm.debian.org/git/pkg-multimedia/ffmpeg.git
|
||||
fi
|
||||
cd ffmpeg
|
||||
./configure --prefix=$WLD --extra-ldflags="-L$WLD/lib -lstdc++ -lm -lrt -ldl" --extra-cflags="-I$WLD/include" --enable-shared --enable-avfilter --enable-gpl --enable-avresample --enable-libx265 --enable-libvpx --enable-libx264 --disable-doc
|
||||
make -j5
|
||||
make install
|
||||
|
||||
#opencv_contrib
|
||||
# download manually (hash mismatch)
|
||||
# https://github.com/opencv/opencv_3rdparty/tree/ippicv/master_20151201/ippicv
|
||||
|
||||
|
||||
if ( test -d /external/cairo-1.14.10 )
|
||||
then
|
||||
echo "cairo already downloaded"
|
||||
cd /external/cairo-1.14.10
|
||||
else
|
||||
cd /external
|
||||
wget https://www.cairographics.org/releases/cairo-1.14.10.tar.xz
|
||||
tar -xf cairo-1.14.10.tar.xz
|
||||
cd /external/cairo-1.14.10
|
||||
./autogen.sh
|
||||
fi
|
||||
./configure --prefix=$WLD
|
||||
make -j5
|
||||
make install
|
||||
/bin/cp /app/usr/lib/pkgconfig/cairo* /usr/lib/pkgconfig/
|
||||
|
||||
if ( test -d /external/harfbuzz-0.9.10 )
|
||||
then
|
||||
echo "pango already downloaded"
|
||||
cd /external/harfbuzz-0.9.10
|
||||
else
|
||||
cd /external
|
||||
wget https://www.freedesktop.org/software/harfbuzz/release/harfbuzz-0.9.10.tar.bz2
|
||||
tar -xf harfbuzz-0.9.10.tar.bz2
|
||||
cd /external/harfbuzz-0.9.10
|
||||
fi
|
||||
./configure --prefix=$WLD
|
||||
make -j5
|
||||
make install
|
||||
/bin/cp /app/usr/lib/pkgconfig/harf* /usr/lib/pkgconfig/
|
||||
/bin/cp /app/usr/lib/libharfbuzz.* /usr/lib
|
||||
|
||||
if ( test -d /external/pango-1.28.4 )
|
||||
then
|
||||
echo "pango already downloaded"
|
||||
cd /external/pango-1.28.4
|
||||
else
|
||||
cd /external
|
||||
wget http://ftp.gnome.org/pub/GNOME/sources/pango/1.28/pango-1.28.4.tar.gz
|
||||
tar -xf pango-1.28.4.tar.gz
|
||||
cd /external/pango-1.28.4
|
||||
fi
|
||||
./configure --prefix=$WLD
|
||||
make -j5
|
||||
make install
|
||||
/bin/cp /app/usr/lib/pkgconfig/pango* /usr/lib/pkgconfig/
|
||||
|
||||
if ( test -d /external/gdk-pixbuf-2.23.5 )
|
||||
then
|
||||
echo "gdk-pixbuf already downloaded"
|
||||
cd /external/gdk-pixbuf-2.23.5
|
||||
else
|
||||
cd /external
|
||||
wget http://ftp.gnome.org/pub/GNOME/sources/gdk-pixbuf/2.23/gdk-pixbuf-2.23.5.tar.xz
|
||||
tar -xf gdk-pixbuf-2.23.5.tar.xz
|
||||
cd /external/gdk-pixbuf-2.23.5
|
||||
fi
|
||||
./configure --prefix=$WLD
|
||||
make -j5
|
||||
make install
|
||||
/bin/cp /app/usr/lib/pkgconfig/gdk* /usr/lib/pkgconfig/
|
||||
|
||||
|
||||
if ( test -d /external/gtk+-2.23.90 )
|
||||
then
|
||||
echo "gtk2 already downloaded"
|
||||
cd /external/gtk+-2.23.90
|
||||
else
|
||||
cd /external
|
||||
wget http://ftp.gnome.org/pub/GNOME/sources/gtk+/2.23/gtk+-2.23.90.tar.gz
|
||||
tar -xf gtk+-2.23.90.tar.gz
|
||||
cd /external/gtk+-2.23.90
|
||||
fi
|
||||
./configure --prefix=$WLD
|
||||
make -j5
|
||||
make install
|
||||
/bin/cp /app/usr/lib/pkgconfig/gtk* /usr/lib/pkgconfig/
|
||||
/bin/cp /app/usr/lib/pkgconfig/gdk* /usr/lib/pkgconfig/
|
||||
|
||||
cd /external
|
||||
if ( test -d /external/opencv_contrib )
|
||||
then
|
||||
echo "opencv_contrib already cloned"
|
||||
if [ $# -eq 0 ]; then
|
||||
cd opencv_contrib
|
||||
git reset --hard
|
||||
# git pull --rebase
|
||||
git checkout 3.3.0
|
||||
cd ..
|
||||
fi
|
||||
else
|
||||
git clone https://github.com/opencv/opencv_contrib.git
|
||||
fi
|
||||
|
||||
cd /external
|
||||
if ( test -d /external/opencv )
|
||||
then
|
||||
echo "opencv already cloned"
|
||||
if [ $# -eq 0 ]; then
|
||||
cd opencv
|
||||
git reset --hard
|
||||
# git pull --rebase
|
||||
git checkout 3.3.0
|
||||
cd ..
|
||||
fi
|
||||
else
|
||||
git clone https://github.com/opencv/opencv.git
|
||||
fi
|
||||
|
||||
#opencv
|
||||
IN=opencv,https://github.com/opencv/opencv.git,true,""
|
||||
IFS=',' read -a external_options <<< $IN
|
||||
EXTERNAL="${external_options[0]}"
|
||||
EXTERNAL_ADDRESS="${external_options[1]}"
|
||||
EXTERNAL_CMAKE="${external_options[2]}"
|
||||
EXTERNAL_CMAKE_OPTIONS="-DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules -DBUILD_opencv_aruco=OFF -DBUILD_opencv_bgsegm=OFF -DBUILD_opencv_bioinspired=OFF -DBUILD_opencv_ccalib=OFF -DBUILD_opencv_cnn_3dobj=OFF -DBUILD_opencv_cvv=OFF -DBUILD_opencv_dnn=OFF -DBUILD_opencv_dnns_easily_fooled=OFF -DBUILD_opencv_dpm=OFF -DBUILD_opencv_fuzzy=OFF -DBUILD_opencv_hdf=OFF -DBUILD_opencv_line_descriptor=OFF -DBUILD_opencv_matlab=OFF -DBUILD_opencv_optflow=OFF -DBUILD_opencv_plot=ON -DBUILD_opencv_reg=OFF -DBUILD_opencv_rgbd=OFF -DBUILD_opencv_saliency=OFF -DBUILD_opencv_sfm=OFF -DBUILD_opencv_stereo=OFF -DBUILD_opencv_structured_light=OFF -DBUILD_opencv_surface_matching=OFF -DBUILD_opencv_xfeatures2d=OFF -DBUILD_opencv_xobjdetect=OFF -DBUILD_opencv_xphoto=OFF -DBUILD_opencv_calib3d=OFF -DBUILD_opencv_cudaarithm=OFF -DBUILD_opencv_cudabgsegm=OFF -DBUILD_opencv_cudacodec=OFF -DBUILD_opencv_cudafilters=OFF -DBUILD_opencv_cudalegacy=OFF -DBUILD_opencv_cudaobjdetect=OFF -DBUILD_opencv_cudaoptflow=OFF -DBUILD_opencv_cudastereo=OFF -DBUILD_opencv_cudawarping=OFF -DBUILD_opencv_cudev=OFF -DBUILD_opencv_java=OFF -DBUILD_opencv_shape=OFF -DBUILD_opencv_stitching=OFF -DBUILD_opencv_superres=OFF -DBUILD_opencv_ts=OFF -DBUILD_opencv_videoio=OFF -DBUILD_opencv_videostab=OFF -DBUILD_opencv_viz=OFF"
|
||||
|
||||
# create build dir
|
||||
SRC=/external
|
||||
BUILD=/external/build
|
||||
PREFIX=/app/usr/
|
||||
mkdir -p $BUILD/opencv
|
||||
|
||||
# go there
|
||||
cd $BUILD/opencv
|
||||
|
||||
cmake3 -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX $EXTERNAL_CMAKE_OPTIONS $SRC/opencv
|
||||
|
||||
# make
|
||||
make -j8
|
||||
|
||||
# install
|
||||
make install
|
||||
|
||||
|
||||
#EXTERNAL_CONFIGURE="${external_options[3]}"
|
||||
#build_external $EXTERNAL $EXTERNAL_CMAKE_OPTIONS
|
||||
|
||||
|
||||
#vidstab
|
||||
IN=vid.stab,https://github.com/georgmartius/vid.stab.git,true,""
|
||||
IFS=',' read -a external_options <<< $IN
|
||||
EXTERNAL="${external_options[0]}"
|
||||
EXTERNAL_ADDRESS="${external_options[1]}"
|
||||
EXTERNAL_CMAKE="${external_options[2]}"
|
||||
EXTERNAL_CONFIGURE="${external_options[3]}"
|
||||
build_external $EXTERNAL
|
||||
|
||||
|
||||
echo "/////////////////\nBUILDING AV LIBS DONE\n////////////////"
|
||||
259
packaging/appimage/03-kdenlive.sh
Executable file
@@ -0,0 +1,259 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Halt on errors
|
||||
set -e
|
||||
|
||||
# Be verbose
|
||||
set -x
|
||||
|
||||
# Now we are inside CentOS 6
|
||||
grep -r "CentOS release 6" /etc/redhat-release || exit 1
|
||||
|
||||
# Get helper functions
|
||||
wget -q https://github.com/probonopd/AppImages/raw/master/functions.sh -O ./functions.sh
|
||||
. ./functions.sh
|
||||
rm -f functions.sh
|
||||
|
||||
. /opt/rh/devtoolset-3/enable
|
||||
|
||||
#necessary ?
|
||||
#pulseaudio-libs
|
||||
|
||||
QTVERSION=5.9.4
|
||||
QVERSION_SHORT=5.9
|
||||
QTDIR=/usr/local/Qt-${QTVERSION}/
|
||||
|
||||
# qjsonparser, used to add metadata to the plugins needs to work in a en_US.UTF-8 environment. That's
|
||||
# not always set correctly in CentOS 6.7
|
||||
export LC_ALL=en_US.UTF-8
|
||||
export LANG=en_us.UTF-8
|
||||
|
||||
# Determine which architecture should be built
|
||||
if [[ "$(arch)" = "i686" || "$(arch)" = "x86_64" ]] ; then
|
||||
ARCH=$(arch)
|
||||
else
|
||||
echo "Architecture could not be determined"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Make sure we build from the /, parts of this script depends on that. We also need to run as root...
|
||||
cd /
|
||||
|
||||
|
||||
# TO-DO ask about this.
|
||||
export CMAKE_PREFIX_PATH=$QTDIR:/app/share/llvm/
|
||||
|
||||
# if the library path doesn't point to our usr/lib, linking will be broken and we won't find all deps either
|
||||
export LD_LIBRARY_PATH=/usr/lib64/:/usr/lib:/app/usr/lib:$QTDIR/lib/:/opt/python3.5/lib/:$LD_LIBRARY_PATH
|
||||
#export LD_LIBRARY_PATH=/usr/lib64/:/usr/lib:/app/usr/lib:$QTDIR/lib/:$LD_LIBRARY_PATH
|
||||
|
||||
# Workaround for: On CentOS 6, .pc files in /usr/lib/pkgconfig are not recognized
|
||||
# However, this is where .pc files get installed when bulding libraries... (FIXME)
|
||||
# I found this by comparing the output of librevenge's "make install" command
|
||||
# between Ubuntu and CentOS 6
|
||||
|
||||
#ln -sf /usr/share/pkgconfig /usr/lib/pkgconfig
|
||||
|
||||
#update ruby
|
||||
yum -y remove ruby ruby-devel
|
||||
if ( test -d /external/ruby-2.1.2 )
|
||||
then
|
||||
echo "RUBY already cloned"
|
||||
else
|
||||
cd /external
|
||||
wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.2.tar.gz
|
||||
tar xvfvz ruby-2.1.2.tar.gz
|
||||
fi
|
||||
cd /external/ruby-2.1.2
|
||||
./configure
|
||||
make
|
||||
make install
|
||||
gem update --system
|
||||
|
||||
# Get project
|
||||
if [ ! -d /kdenlive ] ; then
|
||||
git clone --depth 1 http://anongit.kde.org/kdenlive.git /kdenlive
|
||||
cd /kdenlive/
|
||||
# git checkout -b timeline2 origin/refactoring_timeline
|
||||
else
|
||||
cd /kdenlive/
|
||||
if [ $# -eq 0 ]; then
|
||||
git pull
|
||||
fi
|
||||
fi
|
||||
cd /kdenlive/
|
||||
#git_pull_rebase_helper
|
||||
|
||||
# Prepare the install location
|
||||
#rm -rf /app/ || true
|
||||
#mkdir -p /app/usr
|
||||
|
||||
# export LLVM_ROOT=/opt/llvm/
|
||||
|
||||
# make sure lib and lib64 are the same thing
|
||||
mkdir -p /app/usr/lib
|
||||
cd /app/usr
|
||||
#ln -s lib lib64
|
||||
|
||||
# start building the deps
|
||||
|
||||
function build_external
|
||||
{ (
|
||||
# errors fatal
|
||||
echo "Compiler version:" $(g++ --version)
|
||||
set -e
|
||||
|
||||
SRC=/external
|
||||
BUILD=/external/build
|
||||
PREFIX=/app/usr/
|
||||
|
||||
# framework
|
||||
EXTERNAL=$1
|
||||
|
||||
# clone if not there
|
||||
mkdir -p $SRC
|
||||
cd $SRC
|
||||
if ( test -d $EXTERNAL )
|
||||
then
|
||||
echo "$EXTERNAL already cloned"
|
||||
if [ $# -eq 0 ]; then
|
||||
cd $EXTERNAL
|
||||
git reset --hard
|
||||
git pull --rebase
|
||||
cd ..
|
||||
fi
|
||||
else
|
||||
git clone $EXTERNAL_ADDRESS
|
||||
fi
|
||||
|
||||
# create build dir
|
||||
mkdir -p $BUILD/$EXTERNAL
|
||||
|
||||
# go there
|
||||
cd $BUILD/$EXTERNAL
|
||||
|
||||
# cmake it
|
||||
if ( $EXTERNAL_CMAKE )
|
||||
then
|
||||
cmake3 -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX $2 $SRC/$EXTERNAL
|
||||
else
|
||||
$EXTERNAL_CONFIGURE
|
||||
fi
|
||||
# make
|
||||
make -j8
|
||||
|
||||
# install
|
||||
make install
|
||||
) }
|
||||
|
||||
|
||||
export WLD=/app/usr/ # change this to another location if you prefer
|
||||
export LD_LIBRARY_PATH=$WLD/lib:$LD_LIBRARY_PATH
|
||||
export PKG_CONFIG_PATH=$WLD/lib/pkgconfig/:$WLD/share/pkgconfig/:/usr/lib/pkgconfig/:$PKG_CONFIG_PATH
|
||||
export PATH=$WLD/bin:$PATH
|
||||
export ACLOCAL_PATH=$WLD/share/aclocal
|
||||
export ACLOCAL="aclocal -I $ACLOCAL_PATH"
|
||||
|
||||
|
||||
IN=frei0r,https://github.com/dyne/frei0r.git,true,""
|
||||
IFS=',' read -a external_options <<< $IN
|
||||
EXTERNAL="${external_options[0]}"
|
||||
EXTERNAL_ADDRESS="${external_options[1]}"
|
||||
EXTERNAL_CMAKE="${external_options[2]}"
|
||||
EXTERNAL_CMAKE_OPTIONS="-DWITHOUT_OPENCV:BOOL=ON"
|
||||
EXTERNAL_CONFIGURE="${external_options[3]}"
|
||||
build_external $EXTERNAL $EXTERNAL_CMAKE_OPTIONS
|
||||
|
||||
#TODO: dependencies for MLT modules (xml, sdl, etc).
|
||||
|
||||
#movit - - Requires some adjustments to build with older automake
|
||||
#cd /external
|
||||
#if ( test -d /external/movit )
|
||||
#then
|
||||
# echo "movit already cloned"
|
||||
#if [ $# -eq 0 ]; then
|
||||
# cd movit
|
||||
# git pull
|
||||
# git reset --hard
|
||||
# git pull --rebase
|
||||
# cd ..
|
||||
#fi
|
||||
#else
|
||||
# git clone https://git.sesse.net/movit
|
||||
#fi
|
||||
#cd movit
|
||||
#./autogen.sh
|
||||
#./configure --prefix=/app/usr
|
||||
#make -j5
|
||||
#make install
|
||||
|
||||
|
||||
#mlt
|
||||
cd /external
|
||||
if ( test -d /external/mlt )
|
||||
then
|
||||
echo "mlt already cloned"
|
||||
if [ $# -eq 0 ]; then
|
||||
cd mlt
|
||||
git reset --hard
|
||||
git pull --rebase
|
||||
#current git master incompatible (crashes Kdenlive on keyframes)
|
||||
git checkout 15105c4
|
||||
cd ..
|
||||
fi
|
||||
else
|
||||
git clone https://github.com/mltframework/mlt.git
|
||||
fi
|
||||
cd mlt
|
||||
|
||||
|
||||
# patch MLT
|
||||
cat > mlt_fix.patch << 'EOF'
|
||||
diff --git a/src/modules/vid.stab/configure b/src/modules/vid.stab/configure
|
||||
index e501888..55f0307 100755
|
||||
--- a/src/modules/vid.stab/configure
|
||||
+++ b/src/modules/vid.stab/configure
|
||||
@@ -19,7 +19,8 @@ then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
- echo > config.mak
|
||||
+ echo "CFLAGS += $(pkg-config --cflags vidstab)" > config.mak
|
||||
+ echo "LDFLAGS += $(pkg-config --libs vidstab)" >> config.mak
|
||||
case $targetos in
|
||||
Darwin)
|
||||
;;
|
||||
EOF
|
||||
cat mlt_fix.patch |patch -p1
|
||||
|
||||
export CXXFLAGS="-std=c++11"
|
||||
./configure --enable-gpl --prefix=/app/usr --disable-rtaudio
|
||||
make -j5
|
||||
make install
|
||||
|
||||
|
||||
|
||||
# Build kdenlive
|
||||
mkdir -p /kdenlive_build
|
||||
mkdir -p /kdenlive_build/po
|
||||
|
||||
if [ ! -d /kdenlive/po ] ; then
|
||||
ln -s /kdenlive_build/po /kdenlive/po
|
||||
fi
|
||||
|
||||
cd /kdenlive_build
|
||||
cmake3 ../kdenlive \
|
||||
-DCMAKE_INSTALL_PREFIX:PATH=/app/usr/ \
|
||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||
-DPACKAGERS_BUILD=1 \
|
||||
-DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON \
|
||||
-DKDE_L10N_AUTO_TRANSLATIONS:BOOL=ON \
|
||||
-DBUILD_TESTS=FALSE
|
||||
make -j8
|
||||
make install
|
||||
|
||||
echo "++++++++++++++++++\nBUILD FINSHED \n+++++++++++++++++";
|
||||
###############################################################
|
||||
# Build complete, AppImage bundling begins here
|
||||
###############################################################
|
||||
|
||||
346
packaging/appimage/04-create-app.sh
Executable file
@@ -0,0 +1,346 @@
|
||||
#!/bin/bash
|
||||
|
||||
|
||||
|
||||
# Halt on errors
|
||||
set -e
|
||||
|
||||
# Be verbose
|
||||
set -x
|
||||
|
||||
# Now we are inside CentOS 6
|
||||
grep -r "CentOS release 6" /etc/redhat-release || exit 1
|
||||
|
||||
# Get helper functions
|
||||
wget -q https://github.com/probonopd/AppImages/raw/master/functions.sh -O ./functions.sh
|
||||
. ./functions.sh
|
||||
rm -f functions.sh
|
||||
|
||||
. /opt/rh/devtoolset-3/enable
|
||||
|
||||
#necessary ?
|
||||
#pulseaudio-libs
|
||||
|
||||
QTVERSION=5.9.1
|
||||
QVERSION_SHORT=5.9
|
||||
#QTDIR=/usr/local/Qt-${QTVERSION}/
|
||||
QTDIR=/usr/
|
||||
|
||||
# qjsonparser, used to add metadata to the plugins needs to work in a en_US.UTF-8 environment. That's
|
||||
# not always set correctly in CentOS 6.7
|
||||
export LC_ALL=en_US.UTF-8
|
||||
export LANG=en_us.UTF-8
|
||||
|
||||
# Determine which architecture should be built
|
||||
if [[ "$(arch)" = "i686" || "$(arch)" = "x86_64" ]] ; then
|
||||
ARCH=$(arch)
|
||||
else
|
||||
echo "Architecture could not be determined"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Make sure we build from the /, parts of this script depends on that. We also need to run as root...
|
||||
cd /
|
||||
|
||||
# TO-DO ask about this.
|
||||
export CMAKE_PREFIX_PATH=$QTDIR:/app/share/llvm/
|
||||
|
||||
# if the library path doesn't point to our usr/lib, linking will be broken and we won't find all deps either
|
||||
export LD_LIBRARY_PATH=/usr/lib64/:/usr/lib:/app/usr/lib:$QTDIR/lib/:/opt/python3.5/lib/:$LD_LIBRARY_PATH
|
||||
#export LD_LIBRARY_PATH=/usr/lib64/:/usr/lib:/app/usr/lib:$QTDIR/lib/:$LD_LIBRARY_PATH
|
||||
|
||||
# Workaround for: On CentOS 6, .pc files in /usr/lib/pkgconfig are not recognized
|
||||
# However, this is where .pc files get installed when bulding libraries... (FIXME)
|
||||
# I found this by comparing the output of librevenge's "make install" command
|
||||
# between Ubuntu and CentOS 6
|
||||
|
||||
#ln -sf /usr/share/pkgconfig /usr/lib/pkgconfig
|
||||
|
||||
export WLD=/app/usr/ # change this to another location if you prefer
|
||||
export LD_LIBRARY_PATH=$WLD/lib:$LD_LIBRARY_PATH
|
||||
export PKG_CONFIG_PATH=$WLD/lib/pkgconfig/:$WLD/share/pkgconfig/:/usr/lib/pkgconfig/:$PKG_CONFIG_PATH
|
||||
export PATH=$WLD/bin:$PATH
|
||||
export ACLOCAL_PATH=$WLD/share/aclocal
|
||||
export ACLOCAL="aclocal -I $ACLOCAL_PATH"
|
||||
|
||||
|
||||
echo "++++++++++++++++++\nBUILD FINSHED \n+++++++++++++++++";
|
||||
###############################################################
|
||||
# Build complete, AppImage bundling begins here
|
||||
###############################################################
|
||||
|
||||
cd /app
|
||||
|
||||
# FIXME: How to find out which subset of plugins is really needed? I used strace when running the binary
|
||||
mkdir -p ./usr/lib/qt5/plugins/
|
||||
|
||||
PLUGINS=$(dirname $QTDIR/plugins/bearer)
|
||||
|
||||
/bin/cp -r $PLUGINS/{bearer,generic,imageformats,platforms,iconengines,platforminputcontexts,xcbglintegrations} ./usr/lib/qt5/plugins/
|
||||
/bin/cp -r $PLUGINS/kf5 ./usr/lib/qt5/plugins/
|
||||
/bin/cp -r $PLUGINS/mltpreview.so ./usr/lib/qt5/plugins/
|
||||
mkdir -p ./usr/lib/qt5/plugins/styles/
|
||||
/bin/cp -r /usr/plugins/styles/breeze.so ./usr/lib/qt5/plugins/styles/
|
||||
/bin/cp -r /usr/plugins/kstyle_breeze_config.so ./usr/lib/qt5/plugins/
|
||||
|
||||
/bin/cp -r $QTDIR/qml ./usr/lib/qt5/
|
||||
cp -ru /usr/share/mime/* /app/usr/share/mime
|
||||
update-mime-database /app/usr/share/mime/
|
||||
|
||||
if ( test -d ./usr/lib/plugins )
|
||||
then
|
||||
mv ./usr/lib/plugins/* ./usr/lib/qt5/plugins/
|
||||
fi
|
||||
|
||||
/bin/cp $(ldconfig -p | grep libsasl2.so.2 | cut -d ">" -f 2 | xargs) ./usr/lib/
|
||||
/bin/cp $(ldconfig -p | grep libGL.so.1 | cut -d ">" -f 2 | xargs) ./usr/lib/ # otherwise segfaults!?
|
||||
/bin/cp $(ldconfig -p | grep libGLU.so.1 | cut -d ">" -f 2 | xargs) ./usr/lib/ # otherwise segfaults!?
|
||||
# Fedora 23 seemed to be missing SOMETHING from the Centos 6.7. The only message was:
|
||||
# This application failed to start because it could not find or load the Qt platform plugin "xcb".
|
||||
# Setting export QT_DEBUG_PLUGINS=1 revealed the cause.
|
||||
# QLibraryPrivate::loadPlugin failed on "/usr/lib64/qt5/plugins/platforms/libqxcb.so" :
|
||||
# "Cannot load library /usr/lib64/qt5/plugins/platforms/libqxcb.so: (/lib64/libEGL.so.1: undefined symbol: drmGetNodeTypeFromFd)"
|
||||
# Which means that we have to copy libEGL.so.1 in too
|
||||
# cp $(ldconfig -p | grep libEGL.so.1 | cut -d ">" -f 2 | xargs) ./usr/lib/ # Otherwise F23 cannot load the Qt platform plugin "xcb"
|
||||
# let's not copy xcb itself, that breaks on dri3 systems https://bugs.kde.org/show_bug.cgi?id=360552
|
||||
#cp $(ldconfig -p | grep libxcb.so.1 | cut -d ">" -f 2 | xargs) ./usr/lib/
|
||||
/bin/cp $(ldconfig -p | grep libfreetype.so.6 | cut -d ">" -f 2 | xargs) ./usr/lib/ # For Fedora 20
|
||||
# cp $(ldconfig -p | grep libfuse | cut -d ">" -f 2 | xargs) ./usr/lib/
|
||||
#cp $(ldconfig -p | grep libselinux | cut -d ">" -f 2 | xargs) ./usr/lib/
|
||||
|
||||
ldd usr/bin/kdenlive | grep "=>" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ./usr/lib || true
|
||||
ldd usr/bin/plugins/platforms/libqxcb.so | grep "=>" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ./usr/lib || true
|
||||
|
||||
# Copy in the indirect dependencies
|
||||
FILES=$(find . -type f -executable)
|
||||
|
||||
for FILE in $FILES ; do
|
||||
ldd "${FILE}" | grep "=>" | awk '{print $3}' | xargs -I '{}' cp -v '{}' usr/lib || true
|
||||
done
|
||||
|
||||
cd usr/ ; find . -type f -exec sed -i -e 's|/usr/lib|././/lib|g' {} \; ; cd ..
|
||||
|
||||
#DEPS=""
|
||||
#for FILE in $FILES ; do
|
||||
# ldd "${FILE}" | grep "=>" | awk '{print $3}' | xargs -I '{}' echo '{}' > DEPSFILE
|
||||
#done
|
||||
#DEPS=$(cat DEPSFILE |sort | uniq)
|
||||
#for FILE in $DEPS ; do
|
||||
# if [ -f $FILE ] ; then
|
||||
# echo $FILE
|
||||
# cp --parents -rfL $FILE ./
|
||||
# fi
|
||||
#done
|
||||
#rm -f DEPSFILE
|
||||
|
||||
copy_deps
|
||||
if [ -d lib64 ] ; then
|
||||
mv lib64/* usr/lib/
|
||||
rm -rf lib64/
|
||||
fi
|
||||
|
||||
# YESOK1
|
||||
|
||||
# The following are assumed to be part of the base system
|
||||
rm -f usr/lib/libcom_err.so.2 || true
|
||||
rm -f usr/lib/libcrypt.so.1 || true
|
||||
rm -f usr/lib/libdl.so.2 || true
|
||||
rm -f usr/lib/libexpat.so.1 || true
|
||||
#rm -f usr/lib/libfontconfig.so.1 || true
|
||||
rm -f usr/lib/libgcc_s.so.1 || true
|
||||
rm -f usr/lib/libglib-2.0.so.0 || true
|
||||
rm -f usr/lib/libgpg-error.so.0 || true
|
||||
rm -f usr/lib/libgssapi_krb5.so.2 || true
|
||||
rm -f usr/lib/libgssapi.so.3 || true
|
||||
rm -f usr/lib/libhcrypto.so.4 || true
|
||||
rm -f usr/lib/libheimbase.so.1 || true
|
||||
rm -f usr/lib/libheimntlm.so.0 || true
|
||||
rm -f usr/lib/libhx509.so.5 || true
|
||||
rm -f usr/lib/libICE.so.6 || true
|
||||
rm -f usr/lib/libidn.so.11 || true
|
||||
rm -f usr/lib/libk5crypto.so.3 || true
|
||||
rm -f usr/lib/libkeyutils.so.1 || true
|
||||
rm -f usr/lib/libkrb5.so.26 || true
|
||||
rm -f usr/lib/libkrb5.so.3 || true
|
||||
rm -f usr/lib/libkrb5support.so.0 || true
|
||||
# rm -f usr/lib/liblber-2.4.so.2 || true # needed for debian wheezy
|
||||
# rm -f usr/lib/libldap_r-2.4.so.2 || true # needed for debian wheezy
|
||||
rm -f usr/lib/libm.so.6 || true
|
||||
rm -f usr/lib/libp11-kit.so.0 || true
|
||||
rm -f usr/lib/libpcre.so.3 || true
|
||||
rm -f usr/lib/libpthread.so.0 || true
|
||||
rm -f usr/lib/libresolv.so.2 || true
|
||||
rm -f usr/lib/libroken.so.18 || true
|
||||
rm -f usr/lib/librt.so.1 || true
|
||||
rm -f usr/lib/libsasl2.so.2 || true
|
||||
rm -f usr/lib/libSM.so.6 || true
|
||||
rm -f usr/lib/libusb-1.0.so.0 || true
|
||||
rm -f usr/lib/libuuid.so.1 || true
|
||||
rm -f usr/lib/libwind.so.0 || true
|
||||
rm -f usr/lib/libfontconfig.so.* || true
|
||||
|
||||
# Remove these libraries, we need to use the system versions; this means 11.04 is not supported (12.04 is our baseline)
|
||||
# rm -f usr/lib/libEGL.so.* || true
|
||||
rm -f usr/lib/libxcb* || true
|
||||
rm -f usr/lib/libGL.so.* || true
|
||||
rm -f usr/lib/libdrm.so.* || true
|
||||
rm -f usr/lib/libX11.so.* || true
|
||||
|
||||
#YESOK2
|
||||
|
||||
#mv usr/local/Qt-*/lib/* usr/lib
|
||||
#rm -rf usr/local/
|
||||
# mv ./opt/python3.5/lib/* usr/lib
|
||||
# mv ./opt/llvm/lib/* usr/lib
|
||||
#rm -rf ./opt/
|
||||
rm -rf app/
|
||||
|
||||
#delete_blacklisted
|
||||
BLACKLISTED_FILES=$(cat_file_from_url https://github.com/AppImage/AppImages/raw/master/excludelist | sed 's|#.*||g')
|
||||
echo $BLACKLISTED_FILES
|
||||
for FILE in $BLACKLISTED_FILES ;
|
||||
do
|
||||
if [[ $FILE == libpango* ]] || [[ $FILE == libgdk_pixbuf* ]] ;
|
||||
then
|
||||
echo "keeping libpango"
|
||||
else
|
||||
FILES="$(find . -name "${FILE}" -not -path "./usr/optional/*")"
|
||||
for FOUND in $FILES ; do
|
||||
rm -vf "$FOUND" "$(readlink -f "$FOUND")"
|
||||
done
|
||||
fi
|
||||
done
|
||||
|
||||
# Do not bundle developer stuff
|
||||
rm -rf usr/include || true
|
||||
rm -rf usr/lib/cmake || true
|
||||
rm -rf usr/lib/pkgconfig || true
|
||||
find . -name '*.la' | xargs -i rm {}
|
||||
rm -rf usr/share/ECM/ || true
|
||||
rm -rf usr/share/gettext || true
|
||||
rm -rf usr/share/pkgconfig || true
|
||||
rm -rf rm -rf ./usr/mkspecs/ || true
|
||||
|
||||
# Remove
|
||||
|
||||
strip -g $(find usr) || true
|
||||
|
||||
if [ ! -z "$(ls -A usr/lib/libexec/kf5)" ]; then
|
||||
/bin/cp -R usr/lib/libexec/kf5/* /app/usr/bin/
|
||||
fi;
|
||||
|
||||
cd /
|
||||
if [ ! -d appimage-exec-wrapper ]; then
|
||||
git clone git://anongit.kde.org/scratch/brauch/appimage-exec-wrapper
|
||||
fi;
|
||||
cd /appimage-exec-wrapper/
|
||||
make clean
|
||||
make
|
||||
|
||||
cd /app
|
||||
/bin/cp -v /appimage-exec-wrapper/exec.so exec_wrapper.so
|
||||
|
||||
cat > AppRun << EOF
|
||||
#!/bin/bash
|
||||
|
||||
DIR="\`dirname \"\$0\"\`"
|
||||
DIR="\`( cd \"\$DIR\" && pwd )\`"
|
||||
export APPDIR=\$DIR
|
||||
|
||||
export LD_PRELOAD=\$DIR/exec_wrapper.so
|
||||
|
||||
export APPIMAGE_ORIGINAL_QML2_IMPORT_PATH=\$QML2_IMPORT_PATH
|
||||
export APPIMAGE_ORIGINAL_LD_LIBRARY_PATH=\$LD_LIBRARY_PATH
|
||||
export APPIMAGE_ORIGINAL_QT_PLUGIN_PATH=\$QT_PLUGIN_PATH
|
||||
export APPIMAGE_ORIGINAL_XDG_DATA_DIRS=\$XDG_DATA_DIRS
|
||||
export APPIMAGE_ORIGINAL_XDG_CONFIG_HOME=\$XDG_CONFIG_HOME
|
||||
export APPIMAGE_ORIGINAL_PATH=\$PATH
|
||||
|
||||
export APPIMAGE_ORIGINAL_MLT_REPOSITORY=\$MLT_REPOSITORY
|
||||
export APPIMAGE_ORIGINAL_MLT_DATA=\$MLT_DATA
|
||||
export APPIMAGE_ORIGINAL_MLT_ROOT_DIR=\$MLT_ROOT_DIR
|
||||
export APPIMAGE_ORIGINAL_MLT_PROFILES_PATH=\$MLT_PROFILES_PATH
|
||||
export APPIMAGE_ORIGINAL_MLT_PRESETS_PATH=\$MLT_PRESETS_PATH
|
||||
|
||||
|
||||
export QML2_IMPORT_PATH=\$DIR/usr/lib/qt5/qml:\$QML2_IMPORT_PATH
|
||||
export LD_LIBRARY_PATH=\$DIR/usr/lib/:\$LD_LIBRARY_PATH
|
||||
export QT_PLUGIN_PATH=\$DIR/usr/lib/qt5/plugins/
|
||||
export XDG_DATA_DIRS=\$DIR/usr/share/:\$XDG_DATA_DIRS
|
||||
export XDG_CONFIG_HOME=\$HOME/.config/kdenlive-appimage/
|
||||
export PATH=\$DIR/usr/bin:\$PATH
|
||||
export KDE_FORK_SLAVES=1
|
||||
|
||||
export MLT_REPOSITORY=\$DIR/usr/lib/mlt/
|
||||
export MLT_DATA=\$DIR/usr/share/mlt/
|
||||
export MLT_ROOT_DIR=\$DIR/usr/
|
||||
export LADSPA_PATH=\$DIR/usr/lib/ladspa
|
||||
export FREI0R_PATH=\$DIR/usr/lib/frei0r-1
|
||||
export MLT_PROFILES_PATH=\$DIR/usr/share/mlt/profiles/
|
||||
export MLT_PRESETS_PATH=\$DIR/usr/share/mlt/presets/
|
||||
export SDL_AUDIODRIVER=pulseaudio
|
||||
export XDG_CURRENT_DESKTOP=
|
||||
|
||||
export APPIMAGE_STARTUP_QML2_IMPORT_PATH=\$QML2_IMPORT_PATH
|
||||
export APPIMAGE_STARTUP_LD_LIBRARY_PATH=\$LD_LIBRARY_PATH
|
||||
export APPIMAGE_STARTUP_QT_PLUGIN_PATH=\$QT_PLUGIN_PATH
|
||||
export APPIMAGE_STARTUP_XDG_DATA_DIRS=\$XDG_DATA_DIRS
|
||||
export APPIMAGE_STARTUP_XDG_CONFIG_HOME=\$XDG_CONFIG_HOME
|
||||
export APPIMAGE_STARTUP_PATH=\$PATH
|
||||
|
||||
export APPIMAGE_STARTUP_MLT_REPOSITORY=\$MLT_REPOSITORY
|
||||
export APPIMAGE_STARTUP_MLT_DATA=\$MLT_DATA
|
||||
export APPIMAGE_STARTUP_MLT_ROOT_DIR=\$MLT_ROOT_DIR
|
||||
export APPIMAGE_STARTUP_MLT_PROFILES_PATH=\$MLT_PROFILES_PATH
|
||||
export APPIMAGE_STARTUP_MLT_PRESETS_PATH=\$MLT_PRESETS_PATH
|
||||
export APPIMAGE_STARTUP_SDL_AUDIODRIVER=\$SDL_AUDIODRIVER
|
||||
export APPIMAGE_STARTUP_XDG_CURRENT_DESKTOP=\$XDG_CURRENT_DESKTOP
|
||||
|
||||
kdenlive --config kdenlive-appimagerc \$@
|
||||
EOF
|
||||
chmod +x AppRun
|
||||
|
||||
/bin/cp /kdenlive/data/org.kde.kdenlive.desktop kdenlive.desktop
|
||||
/bin/cp /kdenlive/data/icons/128-apps-kdenlive.png ./kdenlive.png
|
||||
|
||||
#TO-DO this will need some text manipulation in ruby to get this var.
|
||||
APP=Kdenlive
|
||||
LOWERAPP=kdenlive
|
||||
|
||||
get_desktopintegration kdenlive
|
||||
|
||||
cd /
|
||||
|
||||
#cleanup previous image
|
||||
rm -Rf /$APP/$APP.AppDir
|
||||
|
||||
mkdir -p /$APP/$APP.AppDir
|
||||
cd /$APP/
|
||||
cp -R ../app/* $APP.AppDir/
|
||||
|
||||
# Remove useless stuff
|
||||
rm -Rf $APP.AppDir/usr/share/wallpapers/ || true
|
||||
rm -Rf $APP.AppDir/usr/share/kconf_update/ || true
|
||||
rm -Rf $APP.AppDir/usr/share/gtk-2.0/ || true
|
||||
rm -Rf $APP.AppDir/usr/share/gtk-doc/ || true
|
||||
rm -Rf $APP.AppDir/usr/share/kf5/kdoctools/ || true
|
||||
rm -Rf $APP.AppDir/usr/share/kservices5/searchproviders/ || true
|
||||
rm -Rf $APP.AppDir/usr/share/kservices5/useragentstrings/ || true
|
||||
rm -Rf $APP.AppDir/usr/share/man/ || true
|
||||
rm -Rf $APP.AppDir/usr/bin/ffserver || true
|
||||
rm -Rf $APP.AppDir/usr/bin/gtk-demo || true
|
||||
rm -Rf $APP.AppDir/usr/bin/yasm || true
|
||||
rm -Rf $APP.AppDir/usr/bin/nasm || true
|
||||
rm -Rf $APP.AppDir/usr/bin/ndisasm || true
|
||||
rm -Rf $APP.AppDir/usr/bin/ytasm || true
|
||||
rm -Rf $APP.AppDir/usr/bin/x264 || true
|
||||
rm -Rf $APP.AppDir/usr/bin/x265 || true
|
||||
rm -Rf $APP.AppDir/usr/bin/vsyasm || true
|
||||
rm -Rf $APP.AppDir/usr/bin/vpxdec || true
|
||||
rm -Rf $APP.AppDir/usr/bin/vpxenc || true
|
||||
rm -Rf $APP.AppDir/usr/bin/meinproc5 || true
|
||||
rm -Rf $APP.AppDir/usr/bin/desktoptojson || true
|
||||
rm -Rf $APP.AppDir/usr/lib/kconf_update_bin/ || true
|
||||
|
||||
|
||||
|
||||
28
packaging/appimage/05-buildall.sh
Executable file
@@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
|
||||
|
||||
# Halt on errors
|
||||
set -e
|
||||
|
||||
# Be verbose
|
||||
set -x
|
||||
|
||||
echo "++ building dependencies and frameworks..."
|
||||
. /kdenlive/packaging/appimage/01-dependencies.sh
|
||||
|
||||
echo "++ building dependencies and frameworks DONE"
|
||||
|
||||
echo "++ building AV libraries (ffmpeg, OpenCV) ..."
|
||||
. /kdenlive/packaging/appimage/02-avlibs.sh
|
||||
|
||||
echo "++ building AV libraries (ffmpeg, OpenCV) DONE"
|
||||
|
||||
echo "++ building MLT and Kdenlive ..."
|
||||
. /kdenlive/packaging/appimage/03-kdenlive.sh
|
||||
|
||||
echo "++ building MLT and Kdenlive DONE"
|
||||
|
||||
echo "++ Preparing AppImage folder ..."
|
||||
. /kdenlive/packaging/appimage/04-create-app.sh
|
||||
|
||||
echo "++ Preparing AppImage folder DONE"
|
||||
62
packaging/appimage/3rdparty/CMakeLists.txt
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
# Rules to build 3rd-party libraries for digiKam bundles.
|
||||
#
|
||||
# Copyright (c) 2015-2017, Gilles Caulier, <caulier dot gilles at gmail dot com>
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
#
|
||||
|
||||
project(digikam-bundles)
|
||||
|
||||
cmake_minimum_required(VERSION 2.8.6)
|
||||
|
||||
function(JoinListAsString VALUES GLUE OUTPUT)
|
||||
string(REPLACE ";" "${GLUE}" _TMP_STR "${VALUES}")
|
||||
set(${OUTPUT} "${_TMP_STR}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
|
||||
message(FATAL_ERROR "Compiling in the source directory is not supported. Use for example 'mkdir build; cd build; cmake ..'.")
|
||||
endif()
|
||||
|
||||
# Tools must be obtained to work with:
|
||||
include (ExternalProject)
|
||||
|
||||
# allow specification of a directory with pre-downloaded
|
||||
# requirements
|
||||
if(NOT IS_DIRECTORY ${EXTERNALS_DOWNLOAD_DIR})
|
||||
message(FATAL_ERROR "No externals download dir set. Use -DEXTERNALS_DOWNLOAD_DIR")
|
||||
endif()
|
||||
|
||||
if(NOT IS_DIRECTORY ${INSTALL_ROOT})
|
||||
message(FATAL_ERROR "No install dir set. Use -DINSTALL_ROOT")
|
||||
endif()
|
||||
|
||||
set(TOP_INST_DIR ${INSTALL_ROOT})
|
||||
set(EXTPREFIX "${TOP_INST_DIR}")
|
||||
set(CMAKE_PREFIX_PATH "${EXTPREFIX}")
|
||||
|
||||
message( STATUS "CMAKE_GENERATOR: ${CMAKE_GENERATOR}")
|
||||
message( STATUS "CMAKE_CL_64: ${CMAKE_CL_64}")
|
||||
|
||||
set(GLOBAL_BUILD_TYPE RelWithDebInfo)
|
||||
set(GLOBAL_PROFILE ${GLOBAL_PROFILE} -DBUILD_TESTING=false)
|
||||
set(PATCH_COMMAND patch)
|
||||
|
||||
# this list must be dependency-ordered
|
||||
add_subdirectory(ext_jpeg)
|
||||
add_subdirectory(ext_jasper)
|
||||
add_subdirectory(ext_png)
|
||||
add_subdirectory(ext_tiff)
|
||||
#add_subdirectory(ext_libgphoto2)
|
||||
#add_subdirectory(ext_sane)
|
||||
add_subdirectory(ext_exiv2)
|
||||
add_subdirectory(ext_boost)
|
||||
#add_subdirectory(ext_opencv)
|
||||
#add_subdirectory(ext_lensfun)
|
||||
add_subdirectory(ext_qt)
|
||||
#add_subdirectory(ext_qtwebkit)
|
||||
#add_subdirectory(ext_qtav)
|
||||
#add_subdirectory(ext_kf5)
|
||||
#add_subdirectory(ext_marble)
|
||||
#add_subdirectory(ext_libksane)
|
||||
23
packaging/appimage/3rdparty/ext_boost/CMakeLists.txt
vendored
Executable file
@@ -0,0 +1,23 @@
|
||||
# Script to build Boost for digiKam bundle.
|
||||
#
|
||||
# Copyright (c) 2015-2017, Gilles Caulier, <caulier dot gilles at gmail dot com>
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
#
|
||||
|
||||
SET(PREFIX_ext_boost "${EXTPREFIX}")
|
||||
|
||||
ExternalProject_Add( ext_boost
|
||||
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
|
||||
URL http://downloads.sourceforge.net/project/boost/boost/1.60.0/boost_1_60_0.tar.bz2
|
||||
URL_MD5 65a840e1a0b13a558ff19eeb2c4f0cbe
|
||||
CONFIGURE_COMMAND <SOURCE_DIR>/bootstrap.sh --prefix=${PREFIX_ext_boost} --with-libraries=system
|
||||
BUILD_COMMAND <SOURCE_DIR>/b2 install
|
||||
INSTALL_COMMAND ""
|
||||
INSTALL_DIR ${PREFIX_ext_boost}
|
||||
|
||||
UPDATE_COMMAND ""
|
||||
ALWAYS 0
|
||||
BUILD_IN_SOURCE 1
|
||||
)
|
||||
112
packaging/appimage/3rdparty/ext_exiv2/CMakeLists.txt
vendored
Executable file
@@ -0,0 +1,112 @@
|
||||
# Script to build Exiv2 for digiKam bundle.
|
||||
#
|
||||
# Copyright (c) 2015-2017, Gilles Caulier, <caulier dot gilles at gmail dot com>
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
#
|
||||
|
||||
set(PREFIX_ext_exiv2 "${EXTPREFIX}")
|
||||
|
||||
set(Exiv2_Conf -DEXIV2_ENABLE_SHARED=ON
|
||||
-DEXIV2_ENABLE_XMP=ON
|
||||
-DEXIV2_ENABLE_LIBXMP=ON
|
||||
-DEXIV2_ENABLE_PNG=ON
|
||||
-DEXIV2_ENABLE_NLS=OFF
|
||||
-DEXIV2_ENABLE_PRINTUCS2=ON
|
||||
-DEXIV2_ENABLE_LENSDATA=ON
|
||||
-DEXIV2_ENABLE_COMMERCIAL=OFF
|
||||
-DEXIV2_ENABLE_BUILD_SAMPLES=OFF
|
||||
-DEXIV2_ENABLE_BUILD_PO=OFF
|
||||
-DEXIV2_ENABLE_VIDEO=OFF
|
||||
-DEXIV2_ENABLE_WEBREADY=OFF
|
||||
-DEXIV2_ENABLE_CURL=OFF
|
||||
-DEXIV2_ENABLE_SSH=OFF
|
||||
)
|
||||
|
||||
JoinListAsString("${Exiv2_Conf}" " " BASH_OPTIONS)
|
||||
|
||||
if(MINGW)
|
||||
|
||||
ExternalProject_Add(ext_exiv2
|
||||
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
|
||||
|
||||
# To use official release tarball
|
||||
URL http://www.exiv2.org/builds/exiv2-0.26-trunk.tar.gz
|
||||
URL_MD5 5399e3b570d7f9205f0e76d47582da4c
|
||||
|
||||
# To use current implementation from SVN
|
||||
|
||||
#SVN_REPOSITORY svn://dev.exiv2.org/svn/trunk
|
||||
|
||||
CONFIGURE_COMMAND cd <SOURCE_DIR> &&
|
||||
./bootstrap.mxe ${MXE_BUILDROOT} RelWithDebInfo ${BASH_OPTIONS}
|
||||
|
||||
BUILD_COMMAND cd <SOURCE_DIR>/build && $(MAKE) -j
|
||||
|
||||
INSTALL_COMMAND cd <SOURCE_DIR>/build && $(MAKE) install/fast
|
||||
|
||||
BUILD_IN_SOURCE 1
|
||||
|
||||
UPDATE_COMMAND ""
|
||||
ALWAYS 0
|
||||
)
|
||||
|
||||
|
||||
elseif(APPLE)
|
||||
|
||||
ExternalProject_Add(ext_exiv2
|
||||
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
|
||||
|
||||
# To use official release tarball
|
||||
|
||||
URL http://www.exiv2.org/builds/exiv2-0.26-trunk.tar.gz
|
||||
URL_MD5 5399e3b570d7f9205f0e76d47582da4c
|
||||
|
||||
# To use current implementation from SVN
|
||||
|
||||
#SVN_REPOSITORY svn://dev.exiv2.org/svn/trunk
|
||||
|
||||
CONFIGURE_COMMAND cp -f ${CMAKE_CURRENT_SOURCE_DIR}/../../../../bootstrap.macports <SOURCE_DIR>/. &&
|
||||
<SOURCE_DIR>/bootstrap.macports ${PREFIX_ext_exiv2} RelWithDebInfo x86_64 ${BASH_OPTIONS}
|
||||
|
||||
BUILD_COMMAND cd <SOURCE_DIR>/build && $(MAKE)
|
||||
|
||||
INSTALL_COMMAND cd <SOURCE_DIR>/build && $(MAKE) install/fast
|
||||
|
||||
BUILD_IN_SOURCE 1
|
||||
|
||||
UPDATE_COMMAND ""
|
||||
ALWAYS 0
|
||||
)
|
||||
|
||||
else() # Linux
|
||||
|
||||
ExternalProject_Add(ext_exiv2
|
||||
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
|
||||
|
||||
# To use official release tarball
|
||||
|
||||
URL http://www.exiv2.org/builds/exiv2-0.26-trunk.tar.gz
|
||||
URL_MD5 5399e3b570d7f9205f0e76d47582da4c
|
||||
|
||||
# To use current implementation from SVN
|
||||
|
||||
#SVN_REPOSITORY svn://dev.exiv2.org/svn/trunk
|
||||
|
||||
CONFIGURE_COMMAND cd <SOURCE_DIR> &&
|
||||
$(CMAKE_COMMAND) . -DCMAKE_INSTALL_PREFIX=${PREFIX_ext_exiv2}
|
||||
-DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE}
|
||||
-DICONV_INCLUDE_DIR=${PREFIX_ext_exiv2}/include
|
||||
${Exiv2_Conf}
|
||||
${GLOBAL_PROFILE}
|
||||
|
||||
BUILD_COMMAND cd <SOURCE_DIR> && $(MAKE)
|
||||
|
||||
INSTALL_COMMAND cd <SOURCE_DIR> && $(MAKE) install/fast
|
||||
|
||||
UPDATE_COMMAND ""
|
||||
ALWAYS 0
|
||||
)
|
||||
|
||||
endif()
|
||||
19
packaging/appimage/3rdparty/ext_jasper/CMakeLists.txt
vendored
Executable file
@@ -0,0 +1,19 @@
|
||||
# Script to build jasperlib for digiKam bundle.
|
||||
#
|
||||
# Copyright (c) 2015-2017, Gilles Caulier, <caulier dot gilles at gmail dot com>
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
#
|
||||
|
||||
SET(PREFIX_ext_jasper "${EXTPREFIX}")
|
||||
|
||||
ExternalProject_Add(ext_jasper
|
||||
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
|
||||
URL http://www.ece.uvic.ca/~frodo/jasper/software/jasper-1.900.29.tar.gz
|
||||
URL_MD5 4619ec9860c10e557b3f192f5e76f596
|
||||
|
||||
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${PREFIX_ext_jasper} ${GLOBAL_AUTOMAKE_PROFILE} --disable-opengl
|
||||
UPDATE_COMMAND ""
|
||||
ALWAYS 0
|
||||
)
|
||||
22
packaging/appimage/3rdparty/ext_jpeg/CMakeLists.txt
vendored
Executable file
@@ -0,0 +1,22 @@
|
||||
# Script to build libjpeg for digiKam bundle.
|
||||
#
|
||||
# Copyright (c) 2015-2017, Gilles Caulier, <caulier dot gilles at gmail dot com>
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
#
|
||||
|
||||
SET(PREFIX_ext_jpeg "${EXTPREFIX}")
|
||||
|
||||
ExternalProject_Add(ext_jpeg
|
||||
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
|
||||
URL https://sourceforge.net/projects/libjpeg-turbo/files/1.5.3/libjpeg-turbo-1.5.3.tar.gz
|
||||
URL_MD5 7c82f0f6a3130ec06b8a4d0b321cbca3
|
||||
|
||||
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${PREFIX_ext_jpeg}
|
||||
--without-simd
|
||||
--with-jpeg8
|
||||
|
||||
UPDATE_COMMAND ""
|
||||
ALWAYS 0
|
||||
)
|
||||
121
packaging/appimage/3rdparty/ext_opencv/CMakeLists.txt
vendored
Normal file
@@ -0,0 +1,121 @@
|
||||
# Script to build OpenCV for digiKam bundle.
|
||||
#
|
||||
# Copyright (c) 2015-2017, Gilles Caulier, <caulier dot gilles at gmail dot com>
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
#
|
||||
|
||||
set(EXTPREFIX_opencv "${EXTPREFIX}" )
|
||||
|
||||
set(Opencv_Conf -DBUILD_EXAMPLES=OFF
|
||||
-DBUILD_TESTS=OFF
|
||||
-DBUILD_DOCS=OFF
|
||||
-DBUILD_PERF_TESTS=OFF
|
||||
-DBUILD_NEW_PYTHON_SUPPORT=OFF
|
||||
-BUILD_ZLIB=OFF
|
||||
-DOPENCV_BUILD_3RDPARTY_LIBS=OFF
|
||||
-DINSTALL_C_EXAMPLES=OFF
|
||||
-DINSTALL_PYTHON_EXAMPLES=OFF
|
||||
-DWITH_1394=OFF
|
||||
-DWITH_VTK=OFF
|
||||
-DWITH_CUDA=OFF
|
||||
-DWITH_DIRECTX=OFF
|
||||
-DWITH_DSHOW=OFF
|
||||
-DWITH_EIGEN=OFF
|
||||
-DWITH_FFMPEG=OFF
|
||||
-DWITH_GSTREAMER=OFF
|
||||
-DWITH_GTK=OFF
|
||||
-DWITH_IPP=OFF
|
||||
-DWITH_JASPER=OFF
|
||||
-DWITH_JPEG=OFF
|
||||
-DWITH_MATLAB=OFF
|
||||
-DWITH_OPENEXR=OFF
|
||||
-DWITH_OPENNI=OFF
|
||||
-DWITH_PNG=OFF
|
||||
-DWITH_PVAPI=OFF
|
||||
-DWITH_WIN32UI=OFF
|
||||
-DWITH_QT=OFF
|
||||
-DWITH_QUICKTIME=OFF
|
||||
-DWITH_QT_OPENGL=OFF
|
||||
-DWITH_TBB=OFF
|
||||
-DWITH_TIFF=OFF
|
||||
-DWITH_UNICAP=OFF
|
||||
-DWITH_V4L=OFF
|
||||
-DWITH_VFW=OFF
|
||||
-DWITH_VIDEOINPUT=OFF
|
||||
-DWITH_XINE=OFF
|
||||
-DWITH_OPENCL=OFF
|
||||
-DWITH_GPHOTO2=OFF
|
||||
-DBUILD_opencv_videoio=OFF
|
||||
)
|
||||
|
||||
JoinListAsString("${Opencv_Conf}" " " BASH_OPTIONS)
|
||||
|
||||
if(MINGW)
|
||||
|
||||
ExternalProject_Add(ext_opencv
|
||||
|
||||
URL https://github.com/Itseez/opencv/archive/3.2.0.zip
|
||||
URL_MD5 bfc6a261eb069b709bcfe7e363ef5899
|
||||
|
||||
CMAKE_ARGS -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE}
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MXE_TOOLCHAIN}
|
||||
-DCMAKE_INSTALL_PREFIX=${MXE_INSTALL_PREFIX}
|
||||
-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON
|
||||
${GLOBAL_PROFILE}
|
||||
${Opencv_Conf}
|
||||
|
||||
UPDATE_COMMAND ""
|
||||
ALWAYS 0
|
||||
)
|
||||
|
||||
ExternalProject_Add_step(ext_opencv before_download
|
||||
|
||||
# Note : under MXE, in case of curl is not compiled with https support,
|
||||
# we cannot download the tarball as under Linux/MacOS.
|
||||
# COMMAND wget -N https://github.com/Itseez/opencv/archive/3.2.0.zip -O ${EXTERNALS_DOWNLOAD_DIR}/3.2.0.zip
|
||||
# DEPENDERS download
|
||||
)
|
||||
|
||||
elseif(APPLE)
|
||||
|
||||
ExternalProject_Add(ext_opencv
|
||||
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
|
||||
|
||||
URL https://github.com/Itseez/opencv/archive/3.2.0.zip
|
||||
URL_MD5 bfc6a261eb069b709bcfe7e363ef5899
|
||||
|
||||
CONFIGURE_COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/../../../../bootstrap.macports <SOURCE_DIR>/. &&
|
||||
<SOURCE_DIR>/bootstrap.macports ${EXTPREFIX_opencv} RelWithDebInfo x86_64 "${BASH_OPTIONS}"
|
||||
|
||||
BUILD_COMMAND cd <SOURCE_DIR>/build && $(MAKE)
|
||||
|
||||
INSTALL_COMMAND cd <SOURCE_DIR>/build && make install/fast
|
||||
|
||||
BUILD_IN_SOURCE 1
|
||||
|
||||
UPDATE_COMMAND ""
|
||||
ALWAYS 0
|
||||
)
|
||||
|
||||
else() #Linux
|
||||
|
||||
ExternalProject_Add(ext_opencv
|
||||
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
|
||||
|
||||
URL https://github.com/Itseez/opencv/archive/3.2.0.zip
|
||||
URL_MD5 bfc6a261eb069b709bcfe7e363ef5899
|
||||
|
||||
INSTALL_DIR ${EXTPREFIX_opencv}
|
||||
|
||||
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_opencv}
|
||||
-DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE}
|
||||
${GLOBAL_PROFILE}
|
||||
${Opencv_Conf}
|
||||
|
||||
UPDATE_COMMAND ""
|
||||
ALWAYS 0
|
||||
)
|
||||
|
||||
endif()
|
||||
19
packaging/appimage/3rdparty/ext_png/CMakeLists.txt
vendored
Executable file
@@ -0,0 +1,19 @@
|
||||
# Script to build libpng for digiKam bundle.
|
||||
#
|
||||
# Copyright (c) 2015-2017, Gilles Caulier, <caulier dot gilles at gmail dot com>
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
#
|
||||
|
||||
SET(PREFIX_ext_png "${EXTPREFIX}")
|
||||
|
||||
ExternalProject_Add(ext_png
|
||||
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
|
||||
URL http://prdownloads.sourceforge.net/libpng/libpng-1.6.26.tar.xz
|
||||
URL_MD5 faed9bb495d2e12dd0c9ec561ca60cd8
|
||||
|
||||
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${PREFIX_ext_png}
|
||||
UPDATE_COMMAND ""
|
||||
ALWAYS 0
|
||||
)
|
||||
65
packaging/appimage/3rdparty/ext_qt/CMakeLists.txt
vendored
Normal file
@@ -0,0 +1,65 @@
|
||||
# Script to build Qt for digiKam bundle.
|
||||
#
|
||||
# Copyright (c) 2015-2017, Gilles Caulier, <caulier dot gilles at gmail dot com>
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
#
|
||||
|
||||
SET(EXTPREFIX_qt "${EXTPREFIX}")
|
||||
|
||||
ExternalProject_Add(ext_qt
|
||||
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
|
||||
URL https://download.qt.io/official_releases/qt/5.9/5.9.4/single/qt-everywhere-opensource-src-5.9.4.tar.xz
|
||||
URL_MD5 d95f6ecb491e731c2fca622ccc7b6bbd
|
||||
CONFIGURE_COMMAND <SOURCE_DIR>/configure
|
||||
-prefix ${EXTPREFIX_qt}
|
||||
-opensource
|
||||
-confirm-license
|
||||
-nomake examples
|
||||
-sql-sqlite
|
||||
-fontconfig
|
||||
-openssl
|
||||
-optimized-qmake
|
||||
-no-mtdev
|
||||
-no-journald
|
||||
-no-syslog
|
||||
-no-tslib
|
||||
-no-directfb
|
||||
-no-linuxfb
|
||||
-no-libproxy
|
||||
-no-pch
|
||||
-no-compile-examples
|
||||
-qt-zlib
|
||||
-qt-pcre
|
||||
-qt-harfbuzz
|
||||
-qt-xcb
|
||||
-qt-xkbcommon-x11
|
||||
-skip qt3d
|
||||
-skip qtactiveqt
|
||||
-skip qtandroidextras
|
||||
-skip qtcanvas3d
|
||||
-skip qtcharts
|
||||
-skip qtconnectivity
|
||||
-skip qtdatavis3d
|
||||
-skip qtdoc
|
||||
-skip qtgamepad
|
||||
-skip qtlocation
|
||||
-skip qtmultimedia
|
||||
-skip qtpurchasing
|
||||
-skip qtremoteobjects
|
||||
-skip qtserialport
|
||||
-skip qtscxml
|
||||
-skip qtsensors
|
||||
-skip qtspeech
|
||||
-skip qttranslations
|
||||
-skip qtvirtualkeyboard
|
||||
-skip qtwayland
|
||||
-skip qtwebsockets
|
||||
-skip qtwebchannel
|
||||
-skip qtwebengine
|
||||
|
||||
UPDATE_COMMAND ""
|
||||
BUILD_IN_SOURCE 1
|
||||
ALWAYS 0
|
||||
)
|
||||
20
packaging/appimage/3rdparty/ext_tiff/CMakeLists.txt
vendored
Executable file
@@ -0,0 +1,20 @@
|
||||
# Script to build libgphoto for digiKam bundle.
|
||||
#
|
||||
# Copyright (c) 2015-2017, Gilles Caulier, <caulier dot gilles at gmail dot com>
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
#
|
||||
|
||||
SET(EXTPREFIX_tiff "${EXTPREFIX}" )
|
||||
|
||||
ExternalProject_Add(ext_tiff
|
||||
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
|
||||
URL ftp://download.osgeo.org/libtiff/tiff-4.0.6.tar.gz
|
||||
URL_MD5 d1d2e940dea0b5ad435f21f03d96dd72
|
||||
|
||||
CONFIGURE_COMMAND <SOURCE_DIR>/configure -prefix ${EXTPREFIX_tiff}
|
||||
UPDATE_COMMAND ""
|
||||
ALWAYS 0
|
||||
)
|
||||
|
||||
81
packaging/appimage/howto.txt
Normal file
@@ -0,0 +1,81 @@
|
||||
|
||||
----------- These first part is only required once ---------------
|
||||
|
||||
# install docker from your package manager
|
||||
|
||||
# get docker centos image
|
||||
|
||||
docker pull centos:6
|
||||
|
||||
|
||||
# create the container and start it
|
||||
|
||||
docker run -i -t centos:6 /bin/bash
|
||||
|
||||
|
||||
# install git
|
||||
|
||||
yum -y install git
|
||||
|
||||
|
||||
# clone kdenlive repository
|
||||
|
||||
cd /
|
||||
git clone git://anongit.kde.org/kdenlive.git
|
||||
|
||||
|
||||
# If you want to build a specific branch, now is the time, for example:
|
||||
cd kdenlive
|
||||
git checkout -b timeline2 origin/refactoring_timeline
|
||||
|
||||
------------------------------------------------------------------
|
||||
|
||||
# The next time you want to enter your docker container, use:
|
||||
|
||||
docker start -a -i f7001a5ae294
|
||||
|
||||
|
||||
# where f7001a5ae294 is the container id, can be found using
|
||||
|
||||
docker ps -a
|
||||
|
||||
------------------------------------------------------------------
|
||||
|
||||
# Run the build scripts:
|
||||
|
||||
. /kdenlive/packaging/appimage/05-buildall.sh
|
||||
|
||||
|
||||
# When the build is finished, you will have an AppImage folder:
|
||||
|
||||
/Kdenlive/Kdenlive.AppDir
|
||||
|
||||
|
||||
--- Last step: packaging on the host --------------------------------------------
|
||||
|
||||
# You need to create the AppImage from this directory. However
|
||||
# due to squashfs issues, you cannot create it from inside docker
|
||||
# so my solution is to copy this folder to the host and do the packaging job here.
|
||||
|
||||
Open a new terminal on the host computer.
|
||||
|
||||
# Copy the AppImage directory
|
||||
|
||||
docker cp f7001a5ae294:/Kdenlive/Kdenlive.AppDir .
|
||||
|
||||
# Get AppImageTool if not done yet:
|
||||
|
||||
wget https://github.com/AppImage/AppImageKit/releases/download/9/appimagetool-x86_64.AppImage
|
||||
|
||||
# Make it executable
|
||||
|
||||
chmod +x appimagetool-x86_64.AppImage
|
||||
|
||||
# Build the AppImage
|
||||
|
||||
./appimagetool-x86_64.AppImage Kdenlive.AppDir
|
||||
|
||||
# DONE ! You now have an AppImage called Kdenlive-x86_64.AppImage
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
240
packaging/kdenlive-lnx-withalldeps.sh
Normal file
@@ -0,0 +1,240 @@
|
||||
#!/bin/bash
|
||||
# (C) 2018 V. Pinon <vpinon@kde.org>
|
||||
# License: GPLv2+
|
||||
# Tested in Debian sid x86_64
|
||||
|
||||
# Be verbose, halt on errors
|
||||
set -xe
|
||||
|
||||
# Prepare the install location
|
||||
# change this to another location if you prefer
|
||||
export WLD=/app/usr
|
||||
SRC_DIR=/external
|
||||
|
||||
mkdir -p $WLD/lib $SRC_DIR
|
||||
# make sure lib and lib64 are the same thing
|
||||
[[ -L $WLD/lib64 ]] || ln -s $WLD/lib $WLD/lib64
|
||||
# qjsonparser, used to add metadata to the plugins needs to work in a en_US.UTF-8 environment.
|
||||
export LC_ALL=en_US.UTF-8 LANG=en_us.UTF-8
|
||||
export PATH=$WLD/bin:$PATH
|
||||
export LD_LIBRARY_PATH=$WLD/lib:/usr/lib64/:/usr/lib
|
||||
export PKG_CONFIG_PATH=$WLD/lib/pkgconfig/:$WLD/share/pkgconfig/:/usr/lib/pkgconfig
|
||||
export ACLOCAL_PATH=$WLD/share/aclocal
|
||||
export ACLOCAL="aclocal -I $ACLOCAL_PATH"
|
||||
|
||||
CPU_CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
|
||||
if [[ $CPU_CORES -gt 1 ]]; then
|
||||
CPU_CORES=$((CPU_CORES-1))
|
||||
fi
|
||||
ARCH=$(arch)
|
||||
if [[ "$ARCH" != "i686" && "$ARCH" != "x86_64" ]] ; then
|
||||
echo "Architecture could not be determined" ; exit 1
|
||||
fi
|
||||
|
||||
# $1: repo URL, $2: branch
|
||||
function git_pull {
|
||||
URL=$1 BRANCH=$2
|
||||
PKG=${URL##*/}; PKG=${PKG%%.git}
|
||||
cd $SRC_DIR
|
||||
if [ -d $PKG ]; then
|
||||
echo "$PKG already cloned"
|
||||
cd $PKG
|
||||
git reset --hard
|
||||
git checkout $BRANCH
|
||||
git pull --rebase
|
||||
cd ..
|
||||
else
|
||||
git clone $URL
|
||||
fi
|
||||
}
|
||||
|
||||
# $1: archive URL
|
||||
function wget_extract {
|
||||
URL=$1
|
||||
ARCHIVE=${URL##*/}
|
||||
PKGVERS=${ARCHIVE%%.tar.*}
|
||||
cd $SRC_DIR
|
||||
if [ -d $SRC_DIR/$PKGVERS ]; then
|
||||
echo "$PKGVERS already downloaded"
|
||||
else
|
||||
[ -f $ARCHIVE ] || wget --no-check-certificate $URL
|
||||
if [[ ${ARCHIVE##*.} == zip ]] ; then
|
||||
unzip $ARCHIVE
|
||||
else
|
||||
tar -xf ${URL##*/}
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# $1: package name ; $*: cmake args
|
||||
function cmake_make {
|
||||
PKG=$1; shift; CMAKE_ARGS=$*
|
||||
mkdir -p $SRC_DIR/$PKG/build
|
||||
cd $SRC_DIR/$PKG/build
|
||||
cmake -DCMAKE_INSTALL_PREFIX:PATH=$WLD -DCMAKE_BUILD_TYPE=Release $CMAKE_ARGS ..
|
||||
make -j$CPU_CORES
|
||||
make install
|
||||
}
|
||||
|
||||
# $1: package name ; $2: configure args
|
||||
function configure_make {
|
||||
PKG=$1; shift; CONFIGURE_ARGS=$*
|
||||
cd $SRC_DIR/$PKG
|
||||
./configure --prefix=$WLD $CONFIGURE_ARGS
|
||||
make -j$CPU_CORES
|
||||
make install
|
||||
}
|
||||
|
||||
# Build tools
|
||||
wget_extract https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
|
||||
cmake_make yasm-1.3.0
|
||||
wget_extract http://www.nasm.us/pub/nasm/releasebuilds/2.13.02/nasm-2.13.02.tar.xz
|
||||
configure_make nasm-2.13.02
|
||||
|
||||
# Media libs
|
||||
wget_extract ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.1.5.tar.bz2
|
||||
configure_make alsa-lib-1.1.5
|
||||
wget_extract https://libsdl.org/release/SDL2-2.0.8.tar.gz
|
||||
configure_make SDL2-2.0.8 --with-alsa-prefix=$WLD/lib --with-alsa-inc-prefix=$WLD/include
|
||||
|
||||
# Image libs
|
||||
wget_extract https://sourceforge.net/projects/libjpeg-turbo/files/1.5.3/libjpeg-turbo-1.5.3.tar.gz
|
||||
configure_make libjpeg-turbo-1.5.3
|
||||
wget_extract http://www.ece.uvic.ca/~frodo/jasper/software/jasper-2.0.14.tar.gz
|
||||
cmake_make jasper-2.0.14
|
||||
wget_extract http://prdownloads.sourceforge.net/libpng/libpng-1.6.34.tar.xz
|
||||
configure_make libpng-1.6.34
|
||||
wget_extract https://codeload.github.com/Exiv2/exiv2/tar.gz/master
|
||||
cmake_make exiv2-master \
|
||||
-DEXIV2_ENABLE_NLS=OFF -DEXIV2_ENABLE_PRINTUCS2=OFF -DEXIV2_ENABLE_LENSDATA=OFF -DEXIV2_ENABLE_BUILD_SAMPLES=OFF
|
||||
# Codec libs
|
||||
wget_extract http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.28.tar.gz
|
||||
configure_make libsndfile-1.0.28
|
||||
wget_extract http://www.mega-nerd.com/SRC/libsamplerate-0.1.9.tar.gz
|
||||
configure_make libsamplerate-0.1.9
|
||||
git_pull https://anonscm.debian.org/git/pkg-multimedia/libvpx.git
|
||||
configure_make libvpx --enable-shared
|
||||
git_pull https://anonscm.debian.org/git/pkg-multimedia/x264.git
|
||||
configure_make x264 --enable-shared
|
||||
wget_extract http://ftp.videolan.org/pub/videolan/x265/x265_2.7.tar.gz
|
||||
pushd $SRC_DIR/x265_2.7/build/linux
|
||||
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$WLD" -DENABLE_SHARED=ON ../../source
|
||||
make -j$CPU_CORES
|
||||
make install
|
||||
popd
|
||||
git_pull https://anonscm.debian.org/git/pkg-multimedia/ffmpeg.git debian/7%3.4.2-1
|
||||
configure_make ffmpeg --extra-ldflags="-L$WLD/lib" --extra-cflags="-I$WLD/include" \
|
||||
--enable-shared --enable-gpl --disable-doc --enable-avfilter --enable-avresample \
|
||||
--enable-libvpx --enable-libx264 --enable-libx265
|
||||
|
||||
# Graphics libs
|
||||
wget_extract https://www.cairographics.org/releases/cairo-1.14.12.tar.xz
|
||||
configure_make cairo-1.14.12
|
||||
wget_extract https://www.freedesktop.org/software/harfbuzz/release/harfbuzz-1.7.6.tar.bz2
|
||||
configure_make harfbuzz-1.7.6
|
||||
#requires libfribidi-dev
|
||||
wget_extract https://download.gnome.org/sources/pango/1.42/pango-1.42.0.tar.xz
|
||||
configure_make pango-1.42.0
|
||||
wget_extract https://download.gnome.org/sources/gdk-pixbuf/2.32/gdk-pixbuf-2.32.3.tar.xz
|
||||
configure_make gdk-pixbuf-2.32.3
|
||||
wget_extract https://download.gnome.org/sources/gtk+/2.24/gtk+-2.24.32.tar.xz
|
||||
configure_make gtk+-2.24.32
|
||||
wget_extract https://download.qt.io/official_releases/qt/5.10/5.10.1/single/qt-everywhere-src-5.10.1.tar.xz
|
||||
pushd $SRC_DIR/qt-everywhere-src-5.10.1
|
||||
./configure -prefix $WLD -opensource -confirm-license -release -shared \
|
||||
-nomake examples -nomake tests -no-pch \
|
||||
-qt-zlib -qt-pcre -qt-harfbuzz -openssl \
|
||||
-qt-xcb -qt-xkbcommon-x11
|
||||
make -j$CPU_CORES
|
||||
make install
|
||||
popd
|
||||
|
||||
# libxcb-keysyms1-dev
|
||||
# KDE Frameworks
|
||||
KF5_VERSION=5.44.0
|
||||
for FRAMEWORK in \
|
||||
extra-cmake-modules breeze-icons karchive kconfig kcoreaddons kdbusaddons kguiaddons \
|
||||
ki18n kitemviews kwidgetsaddons kcompletion kwindowsystem \
|
||||
kcrash kjobwidgets kauth kcodecs kconfigwidgets kiconthemes \
|
||||
solid sonnet attica kservice kglobalaccel ktextwidgets \
|
||||
kxmlgui kbookmarks knotifications kio knewstuff knotifyconfig \
|
||||
kpackage kdeclarative ; do
|
||||
#git_pull git://anongit.kde.org/$FRAMEWORK v$KF5_VERSION
|
||||
wget_extract https://download.kde.org/stable/frameworks/${KF5_VERSION%.*}/$FRAMEWORK-$KF5_VERSION.tar.xz
|
||||
if [ "$FRAMEWORK" = "breeze-icons" ]; then
|
||||
cmake_make $FRAMEWORK-$KF5_VERSION -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON -DBUILD_TESTING:BOOL=OFF -DBINARY_ICONS_RESOURCE=1
|
||||
elif [ "$FRAMEWORK" = "knotifications" ]; then
|
||||
cd $FRAMEWORK-$KF5_VERSION
|
||||
cat | patch -p1 << EOF
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 0104c73..de44e9a 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -59,11 +59,11 @@ find_package(KF5Config \${KF5_DEP_VERSION} REQUIRED)
|
||||
find_package(KF5Codecs \${KF5_DEP_VERSION} REQUIRED)
|
||||
find_package(KF5CoreAddons \${KF5_DEP_VERSION} REQUIRED)
|
||||
|
||||
-find_package(Phonon4Qt5 4.6.60 REQUIRED NO_MODULE)
|
||||
-set_package_properties(Phonon4Qt5 PROPERTIES
|
||||
- DESCRIPTION "Qt-based audio library"
|
||||
- TYPE REQUIRED
|
||||
- PURPOSE "Required to build audio notification support")
|
||||
+#find_package(Phonon4Qt5 4.6.60 REQUIRED NO_MODULE)
|
||||
+#set_package_properties(Phonon4Qt5 PROPERTIES
|
||||
+# DESCRIPTION "Qt-based audio library"
|
||||
+# TYPE REQUIRED
|
||||
+# PURPOSE "Required to build audio notification support")
|
||||
if (Phonon4Qt5_FOUND)
|
||||
add_definitions(-DHAVE_PHONON4QT5)
|
||||
endif()
|
||||
EOF
|
||||
|
||||
cmake_make $FRAMEWORK-$KF5_VERSION -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON -DBUILD_TESTING:BOOL=OFF
|
||||
else
|
||||
cmake_make $FRAMEWORK-$KF5_VERSION -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON -DBUILD_TESTING:BOOL=OFF
|
||||
fi
|
||||
done
|
||||
wget_extract https://download.kde.org/stable/plasma/5.12.4/kdecoration-5.12.4.tar.xz
|
||||
cmake_make kdecoration-5.12.4 -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON -DBUILD_TESTING:BOOL=OFF
|
||||
wget_extract https://download.kde.org/stable/plasma/5.12.4/breeze-5.12.4.tar.xz
|
||||
cmake_make breeze-5.12.4 -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON -DBUILD_TESTING:BOOL=OFF
|
||||
|
||||
wget_extract https://codeload.github.com/opencv/opencv/tar.gz/3.4.1
|
||||
wget_extract https://github.com/opencv/opencv_contrib/archive/3.4.1.tar.gz
|
||||
cmake_make opencv-3.4.1 -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.4.1/modules \
|
||||
-DJASPER_INCLUDE_DIR=$WLD/include \
|
||||
-DBUILD_opencv_plot=ON \
|
||||
-DBUILD_opencv_aruco=OFF -DBUILD_opencv_bgsegm=OFF -DBUILD_opencv_bioinspired=OFF \
|
||||
-DBUILD_opencv_ccalib=OFF -DBUILD_opencv_cnn_3dobj=OFF -DBUILD_opencv_cvv=OFF \
|
||||
-DBUILD_opencv_dnn=OFF -DBUILD_opencv_dnns_easily_fooled=OFF -DBUILD_opencv_dpm=OFF \
|
||||
-DBUILD_opencv_fuzzy=OFF -DBUILD_opencv_hdf=OFF -DBUILD_opencv_line_descriptor=OFF \
|
||||
-DBUILD_opencv_matlab=OFF -DBUILD_opencv_optflow=OFF \
|
||||
-DBUILD_opencv_reg=OFF -DBUILD_opencv_rgbd=OFF -DBUILD_opencv_saliency=OFF \
|
||||
-DBUILD_opencv_sfm=OFF -DBUILD_opencv_stereo=OFF -DBUILD_opencv_structured_light=OFF \
|
||||
-DBUILD_opencv_surface_matching=OFF -DBUILD_opencv_xfeatures2d=OFF \
|
||||
-DBUILD_opencv_xobjdetect=OFF -DBUILD_opencv_xphoto=OFF -DBUILD_opencv_calib3d=OFF \
|
||||
-DBUILD_opencv_cudaarithm=OFF -DBUILD_opencv_cudabgsegm=OFF \
|
||||
-DBUILD_opencv_cudacodec=OFF -DBUILD_opencv_cudafilters=OFF \
|
||||
-DBUILD_opencv_cudalegacy=OFF -DBUILD_opencv_cudaobjdetect=OFF \
|
||||
-DBUILD_opencv_cudaoptflow=OFF -DBUILD_opencv_cudastereo=OFF \
|
||||
-DBUILD_opencv_cudawarping=OFF -DBUILD_opencv_cudev=OFF \
|
||||
-DBUILD_opencv_java=OFF -DBUILD_opencv_shape=OFF -DBUILD_opencv_stitching=OFF \
|
||||
-DBUILD_opencv_superres=OFF -DBUILD_opencv_ts=OFF -DBUILD_opencv_videoio=OFF \
|
||||
-DBUILD_opencv_videostab=OFF -DBUILD_opencv_viz=OFF
|
||||
#git_pull https://github.com/georgmartius/vid.stab
|
||||
wget_extract https://codeload.github.com/georgmartius/vid.stab/tar.gz/v1.1.0
|
||||
cmake_make vid.stab-1.1.0
|
||||
wget_extract https://files.dyne.org/frei0r/releases/frei0r-plugins-1.6.1.tar.gz
|
||||
cmake_make frei0r-plugins-1.6.1 -DWITHOUT_OPENCV:BOOL=ON
|
||||
# git_pull https://git.sesse.net/movit
|
||||
# pushd $SRC_DIR/movit
|
||||
# ./autogen.sh
|
||||
# popd
|
||||
# configure_make movit
|
||||
|
||||
git_pull https://github.com/mltframework/mlt.git
|
||||
configure_make mlt --enable-gpl --disable-rtaudio
|
||||
#po->ruby
|
||||
git_pull git://anongit.kde.org/kdenlive
|
||||
cmake_make kdenlive -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON -DPACKAGERS_BUILD=1 -DBUILD_TESTS=FALSE
|
||||
#-DKDE_L10N_AUTO_TRANSLATIONS:BOOL=ON \
|
||||
162
packaging/kdenlive-msys2.sh
Normal file
@@ -0,0 +1,162 @@
|
||||
#!/bin/bash
|
||||
# (C) 2018 V. Pinon <vpinon@kde.org>
|
||||
# License: GPLv2+
|
||||
# Uses msys2 package management, download from msys2.org
|
||||
|
||||
# Be verbose, halt on errors
|
||||
set -xe
|
||||
|
||||
[ -z "$MSYSTEM" ] && echo "Please run under MSYS/MINGW(64)" && exit 1
|
||||
|
||||
# change this to another location if you prefer
|
||||
export SRC=$PWD/src
|
||||
mkdir -p $SRC
|
||||
|
||||
export PREFIX=$MINGW_PREFIX
|
||||
|
||||
#if [ -n "$PREFIX" ] ; then
|
||||
# mkdir -p $PREFIX/lib
|
||||
# export PATH=$PREFIX/bin:$PATH
|
||||
# export LD_LIBRARY_PATH=$PREFIX/lib:/usr/lib
|
||||
# export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig:/usr/lib/pkgconfig
|
||||
#fi
|
||||
|
||||
THREADS=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
|
||||
[[ $THREADS -gt 1 ]] && THREADS=$((THREADS-1))
|
||||
|
||||
# $@: package base names
|
||||
function pacman_install {
|
||||
pacman -Sy --needed ${@/#/mingw-w64-x86_64-}
|
||||
}
|
||||
|
||||
# $1: repo URL, $2: branch
|
||||
function git_pull {
|
||||
URL=$1 BRANCH=$2
|
||||
PKG=${URL##*/}; PKG=${PKG%%.git}
|
||||
cd $SRC
|
||||
if [ -d $PKG ]; then
|
||||
echo "$PKG already cloned"
|
||||
cd $PKG
|
||||
# git reset --hard
|
||||
git checkout $BRANCH
|
||||
git pull --rebase
|
||||
cd ..
|
||||
else
|
||||
git clone $URL
|
||||
fi
|
||||
}
|
||||
|
||||
# $1: archive URL
|
||||
function wget_extract {
|
||||
URL=$1
|
||||
ARCHIVE=${URL##*/}
|
||||
PKGVERS=${ARCHIVE%%.tar.*}
|
||||
cd $SRC
|
||||
if [ -d $SRC/$PKGVERS ]; then
|
||||
echo "$PKGVERS already downloaded"
|
||||
else
|
||||
[ -f $ARCHIVE ] || wget $URL
|
||||
if [[ ${ARCHIVE##*.} == zip ]] ; then
|
||||
unzip $ARCHIVE
|
||||
else
|
||||
tar -xf ${URL##*/}
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# $1: package name ; $@: cmake args
|
||||
function cmake_ninja {
|
||||
PKG=$1; shift; CMAKE_ARGS="$@"
|
||||
[ -n "$PREFIX" ] && CMAKE_ARGS+=" -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX"
|
||||
mkdir -p $SRC/$PKG/build
|
||||
cd $SRC/$PKG/build
|
||||
cmake .. -G Ninja $CMAKE_ARGS
|
||||
ninja install
|
||||
}
|
||||
|
||||
# $1: package name ; $2: configure args
|
||||
function configure_make {
|
||||
PKG=$1; shift; CONFIGURE_ARGS="$@"
|
||||
[ -n "$PREFIX" ] && CONFIGURE_ARGS+=" --prefix=$PREFIX"
|
||||
cd $SRC/$PKG
|
||||
./configure $CONFIGURE_ARGS
|
||||
mingw32-make -j$THREADS
|
||||
mingw32-make install
|
||||
}
|
||||
|
||||
|
||||
#### DOWNLOAD DEPS
|
||||
|
||||
if pacman -Suy ; then
|
||||
# MSYS tools
|
||||
pacman -Sy --needed tar git automake1.16
|
||||
# MINGW packages
|
||||
TOOLS="make cmake ninja pkg-config libtool" # ruby
|
||||
DEPS="gcc drmingw gavl opencv dlfcn SDL2 exiv2 libexif vid.stab ffmpeg gtk2 qt5 fftw ladspa-sdk eigen3 extra-cmake-modules"
|
||||
KF5=(breeze-icons karchive kconfig kcoreaddons kdbusaddons kguiaddons \
|
||||
ki18n kitemviews kwidgetsaddons kcompletion kwindowsystem \
|
||||
kcrash kjobwidgets kauth kcodecs kconfigwidgets kiconthemes \
|
||||
solid sonnet attica kservice kglobalaccel ktextwidgets \
|
||||
kxmlgui kbookmarks knotifications kio knewstuff \
|
||||
kpackage kdeclarative)
|
||||
pacman_install $DEPS $TOOLS ${KF5[@]/%/-qt5}
|
||||
fi
|
||||
|
||||
#### BUILD EXTRA KF5
|
||||
|
||||
KF5_VERSION=$(pacman -Ss $MINGW_PACKAGE_PREFIX-extra-cmake-modules | sed -n 's/.* \(5\..*\)-.*/\1/p')
|
||||
for FRAMEWORK in knotifyconfig purpose ; do
|
||||
#git_pull git://anongit.kde.org/$FRAMEWORK v$KF5_VERSION
|
||||
wget_extract https://download.kde.org/stable/frameworks/${KF5_VERSION%.*}/$FRAMEWORK-$KF5_VERSION.tar.xz
|
||||
cmake_ninja $FRAMEWORK-$KF5_VERSION \
|
||||
-DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON
|
||||
#-DBUILD_TESTING:BOOL=OFF \
|
||||
#-DKDE_INSTALL_LIBDIR=lib \
|
||||
#-DKDE_INSTALL_QMLDIR=share/qt5/qml \
|
||||
#-DKDE_INSTALL_QTPLUGINDIR=share/qt5/plugins \
|
||||
#-DKDE_INSTALL_DBUSDIR=share/dbus-1 \
|
||||
#-DKDE_INSTALL_MANDIR=share/man \
|
||||
#-DKDE_INSTALL_APPDIR=share/applications \
|
||||
#-DKDE_INSTALL_MIMEDIR=share/mime/packages \
|
||||
#-DECM_MKSPECS_INSTALL_DIR=$MINGW_PREFIX/share/qt5/mkspecs/modules \
|
||||
#-DECM_DIR=$MINGW_PREFIX/share/ECM \
|
||||
done
|
||||
mkdir -p $MINGW_PREFIX/bin/data/color-schemes
|
||||
cd $MINGW_PREFIX/bin/data/color-schemes
|
||||
wget https://cgit.kde.org/breeze.git/plain/colors/{Breeze,BreezeDark,BreezeHighContrast,BreezeLight}.colors
|
||||
wget https://cgit.kde.org/plasma-desktop.git/plain/kcms/colors/schemes/{Honeycomb,Norway,ObsidianCoast,Oxygen,OxygenCold,Steel,WontonSoup,Zion,ZionReversed}.colors
|
||||
#### BUILD MULTIMEDIA DEPS
|
||||
|
||||
if false ; then # Still Failing
|
||||
wget_extract https://github.com/jackaudio/jack2/releases/download/v1.9.12/jack2-1.9.12.tar.gz
|
||||
git_pull https://github.com/jackaudio/jack2.git
|
||||
pushd $SRC/jack2 #-1.9.12
|
||||
./waf configure build install -j $THREADS --prefix=$PREFIX
|
||||
popd
|
||||
|
||||
git_pull https://git.sesse.net/movit
|
||||
pushd $SRC/movit
|
||||
./autogen.sh
|
||||
popd
|
||||
configure_make movit
|
||||
fi
|
||||
|
||||
git_pull https://github.com/dyne/frei0r.git
|
||||
cmake_ninja frei0r
|
||||
|
||||
git_pull https://github.com/mltframework/mlt.git
|
||||
configure_make mlt --enable-gpl --enable-gpl3
|
||||
mv $PREFIX/{melt.exe,libmlt*.dll} $PREFIX/bin
|
||||
|
||||
#### BUILD KDENLIVE
|
||||
|
||||
git_pull https://anongit.kde.org/kdenlive.git
|
||||
#git_pull https://anongit.kde.org/releaseme.git
|
||||
#pushd $SRC/kdenlive
|
||||
#ruby ../releaseme/fetchpo.rb --origin stable --project kdenlive --output-dir po --output-poqm-dir poqm .
|
||||
#popd
|
||||
mkdir -p $SRC/kdenlive/build
|
||||
cd $SRC/kdenlive/build
|
||||
cmake_ninja kdenlive -DCMAKE_BUILD_TYPE=RelWithDebSymbols -DBUILD_TESTING:BOOL=OFF -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#include "sampleplugin.h"
|
||||
#include "ui_countdown_ui.h"
|
||||
|
||||
@@ -30,18 +29,23 @@
|
||||
QStringList SamplePlugin::generators(const QStringList &producers) const
|
||||
{
|
||||
QStringList result;
|
||||
if (producers.contains(QLatin1String("pango"))) result << i18n("Countdown");
|
||||
if (producers.contains(QLatin1String("noise"))) result << i18n("Noise");
|
||||
if (producers.contains(QLatin1String("pango"))) {
|
||||
result << i18n("Countdown");
|
||||
}
|
||||
if (producers.contains(QLatin1String("noise"))) {
|
||||
result << i18n("Noise");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
QUrl SamplePlugin::generatedClip(const QString &renderer, const QString &generator, const QUrl &projectFolder, const QStringList &/*lumaNames*/, const QStringList &/*lumaFiles*/, const double fps, const int /*width*/, const int height)
|
||||
{
|
||||
QString prePath;
|
||||
if (generator == i18n("Noise")) {
|
||||
prePath = projectFolder.path() + QLatin1String("/noise");
|
||||
} else prePath = projectFolder.path() + QLatin1String("/counter");
|
||||
} else {
|
||||
prePath = projectFolder.path() + QLatin1String("/counter");
|
||||
}
|
||||
int ct = 0;
|
||||
QString counter = QString::number(ct).rightJustified(5, QLatin1Char('0'), false);
|
||||
while (QFile::exists(prePath + counter + QLatin1String(".mlt"))) {
|
||||
@@ -77,8 +81,7 @@ QUrl SamplePlugin::generatedClip(const QString &renderer, const QString &generat
|
||||
QStringList args;
|
||||
if (generator == i18n("Noise")) {
|
||||
args << QLatin1String("noise:") << QLatin1String("in=0") << QLatin1String("out=") + QString::number((int) fps * view.duration->value());
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
// Countdown producer
|
||||
for (int i = 0; i < view.duration->value(); ++i) {
|
||||
// Create the producers
|
||||
@@ -95,8 +98,7 @@ QUrl SamplePlugin::generatedClip(const QString &renderer, const QString &generat
|
||||
//qDebug() << "/// Generator failed: ";
|
||||
QString error = QString::fromLocal8Bit(generatorProcess.readAllStandardError());
|
||||
KMessageBox::sorry(QApplication::activeWindow(), i18n("Failed to generate clip:\n%1", error), i18n("Generator Failed"));
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
result = view.path->url();
|
||||
}
|
||||
} else {
|
||||
@@ -111,4 +113,3 @@ QUrl SamplePlugin::generatedClip(const QString &renderer, const QString &generat
|
||||
|
||||
Q_EXPORT_PLUGIN2(kdenlive_sampleplugin, SamplePlugin)
|
||||
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#ifndef SAMPLEPLUGIN_H
|
||||
#define SAMPLEPLUGIN_H
|
||||
|
||||
@@ -38,6 +37,5 @@ public:
|
||||
QUrl generatedClip(const QString &renderer, const QString &generator, const QUrl &projectFolder, const QStringList &lumaNames, const QStringList &lumaFiles, const double fps, const int width, const int height);
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -7,13 +7,8 @@ set(kdenlive_render_SRCS
|
||||
)
|
||||
|
||||
add_executable(kdenlive_render ${kdenlive_render_SRCS})
|
||||
ecm_mark_nongui_executable(kdenlive_render)
|
||||
|
||||
qt5_use_modules(kdenlive_render Widgets Concurrent DBus)
|
||||
|
||||
target_link_libraries(kdenlive_render
|
||||
${QT_LIBRARIES}
|
||||
${Qt5_LIBRARIES}
|
||||
)
|
||||
|
||||
target_link_libraries(kdenlive_render Qt5::Core Qt5::DBus)
|
||||
|
||||
install(TARGETS kdenlive_render DESTINATION ${BIN_INSTALL_DIR})
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include <stdio.h>
|
||||
#include <QCoreApplication>
|
||||
#include <QStringList>
|
||||
#include <QFileInfo>
|
||||
#include <QString>
|
||||
#include <QUrl>
|
||||
#include <QDebug>
|
||||
@@ -48,34 +49,42 @@ int main(int argc, char **argv)
|
||||
usekuiserver = true;
|
||||
args.removeFirst();
|
||||
}
|
||||
if (QString(args.at(0)).startsWith(QLatin1String("-pid:"))) {
|
||||
pid = QString(args.at(0)).section(QLatin1Char(':'), 1).toInt();
|
||||
if (args.at(0).startsWith(QLatin1String("-pid:"))) {
|
||||
pid = args.at(0).section(QLatin1Char(':'), 1).toInt();
|
||||
args.removeFirst();
|
||||
}
|
||||
|
||||
if (QString(args.at(0)).startsWith(QLatin1String("-locale:"))) {
|
||||
locale = QString(args.at(0)).section(QLatin1Char(':'), 1);
|
||||
if (args.at(0).startsWith(QLatin1String("-locale:"))) {
|
||||
locale = args.at(0).section(QLatin1Char(':'), 1);
|
||||
args.removeFirst();
|
||||
}
|
||||
if (args.at(0).startsWith(QLatin1String("in=")))
|
||||
if (args.at(0).startsWith(QLatin1String("in="))) {
|
||||
in = args.takeFirst().section(QLatin1Char('='), -1).toInt();
|
||||
if (args.at(0).startsWith(QLatin1String("out=")))
|
||||
}
|
||||
if (args.at(0).startsWith(QLatin1String("out="))) {
|
||||
out = args.takeFirst().section(QLatin1Char('='), -1).toInt();
|
||||
if (args.at(0).startsWith(QLatin1String("preargs=")))
|
||||
}
|
||||
if (args.at(0).startsWith(QLatin1String("preargs="))) {
|
||||
preargs = args.takeFirst().section(QLatin1Char('='), 1).split(QLatin1Char(' '), QString::SkipEmptyParts);
|
||||
}
|
||||
|
||||
QString render = args.takeFirst();
|
||||
QString profile = args.takeFirst();
|
||||
QString rendermodule = args.takeFirst();
|
||||
QString player = args.takeFirst();
|
||||
QByteArray srcString = args.takeFirst().toUtf8();
|
||||
QUrl srcurl = QUrl::fromEncoded(srcString);
|
||||
QString src = srcurl.path();
|
||||
QString srcString = args.takeFirst();
|
||||
QUrl srcurl;
|
||||
if (srcString.startsWith(QLatin1String("consumer:"))) {
|
||||
srcurl = QUrl::fromEncoded(srcString.section(QLatin1Char(':'), 1).toUtf8().constData());
|
||||
} else {
|
||||
srcurl = QUrl::fromEncoded(srcString.toUtf8().constData());
|
||||
}
|
||||
QString src = srcurl.toLocalFile();
|
||||
// The QUrl path() strips the consumer: protocol, so re-add it if necessary
|
||||
if (srcString.startsWith("consumer:"))
|
||||
if (srcString.startsWith(QStringLiteral("consumer:"))) {
|
||||
src.prepend(QLatin1String("consumer:"));
|
||||
QUrl desturl = QUrl::fromEncoded(args.takeFirst().toUtf8());
|
||||
QString dest = desturl.path();
|
||||
}
|
||||
QString dest = QFileInfo(QUrl::fromEncoded(args.takeFirst().toUtf8()).toLocalFile()).absoluteFilePath();
|
||||
bool dualpass = false;
|
||||
bool doerase;
|
||||
QString vpre;
|
||||
@@ -85,7 +94,7 @@ int main(int argc, char **argv)
|
||||
vpre = args.at(vprepos);
|
||||
}
|
||||
QStringList vprelist = vpre.remove(QStringLiteral("vpre=")).split(QLatin1Char(','));
|
||||
if (vprelist.size() > 0) {
|
||||
if (!vprelist.isEmpty()) {
|
||||
args.replaceInStrings(QRegExp(QLatin1String("^vpre=.*")), QStringLiteral("vpre=%1").arg(vprelist.at(0)));
|
||||
}
|
||||
|
||||
@@ -94,7 +103,9 @@ int main(int argc, char **argv)
|
||||
dualpass = true;
|
||||
doerase = false;
|
||||
args.replace(args.indexOf(QStringLiteral("pass=2")), QStringLiteral("pass=1"));
|
||||
if (args.contains(QStringLiteral("vcodec=libx264"))) args << QStringLiteral("passlogfile=%1").arg(dest + QStringLiteral(".log"));
|
||||
if (args.contains(QStringLiteral("vcodec=libx264"))) {
|
||||
args << QStringLiteral("passlogfile=%1").arg(dest + QStringLiteral(".log"));
|
||||
}
|
||||
} else {
|
||||
args.removeAll(QStringLiteral("pass=1"));
|
||||
doerase = erase;
|
||||
@@ -110,18 +121,21 @@ int main(int argc, char **argv)
|
||||
|
||||
qDebug() << "//STARTING RENDERING: " << erase << ',' << usekuiserver << ',' << render << ',' << profile << ',' << rendermodule << ',' << player << ',' << src << ',' << dest << ',' << preargs << ',' << args << ',' << in << ',' << out;
|
||||
RenderJob *job = new RenderJob(doerase, usekuiserver, pid, render, profile, rendermodule, player, src, dest, preargs, args, in, out);
|
||||
if (!locale.isEmpty()) job->setLocale(locale);
|
||||
if (!locale.isEmpty()) {
|
||||
job->setLocale(locale);
|
||||
}
|
||||
job->start();
|
||||
RenderJob *dualjob = NULL;
|
||||
RenderJob *dualjob = nullptr;
|
||||
if (dualpass) {
|
||||
if (vprelist.size()>1)
|
||||
if (vprelist.size() > 1) {
|
||||
args.replaceInStrings(QRegExp(QLatin1String("^vpre=.*")), QStringLiteral("vpre=%1").arg(vprelist.at(1)));
|
||||
}
|
||||
args.replace(args.indexOf(QStringLiteral("pass=1")), QStringLiteral("pass=2"));
|
||||
dualjob = new RenderJob(erase, usekuiserver, pid, render, profile, rendermodule, player, src, dest, preargs, args, in, out);
|
||||
QObject::connect(job, SIGNAL(renderingFinished()), dualjob, SLOT(start()));
|
||||
QObject::connect(job, &RenderJob::renderingFinished, dualjob, &RenderJob::start);
|
||||
}
|
||||
app.exec();
|
||||
if (dualjob) delete dualjob;
|
||||
delete dualjob;
|
||||
} else {
|
||||
fprintf(stderr, "Kdenlive video renderer for MLT.\nUsage: "
|
||||
"kdenlive_render [-erase] [-kuiserver] [-locale:LOCALE] [in=pos] [out=pos] [render] [profile] [rendermodule] [player] [src] [dest] [[arg1] [arg2] ...]\n"
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#include "renderjob.h"
|
||||
|
||||
#include <QtDBus>
|
||||
@@ -29,13 +28,13 @@
|
||||
class SleepThread : QThread
|
||||
{
|
||||
public:
|
||||
virtual void run() {}
|
||||
static void msleep(unsigned long msecs) {
|
||||
void run() Q_DECL_OVERRIDE {}
|
||||
static void msleep(unsigned long msecs)
|
||||
{
|
||||
QThread::msleep(msecs);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
RenderJob::RenderJob(bool erase, bool usekuiserver, int pid, const QString &renderer, const QString &profile, const QString &rendermodule, const QString &player, const QString &scenelist, const QString &dest, const QStringList &preargs, const QStringList &args, int in, int out) :
|
||||
QObject(),
|
||||
m_scenelist(scenelist),
|
||||
@@ -43,10 +42,10 @@ RenderJob::RenderJob(bool erase, bool usekuiserver, int pid, const QString& rend
|
||||
m_progress(0),
|
||||
m_prog(renderer),
|
||||
m_player(player),
|
||||
m_jobUiserver(NULL),
|
||||
m_kdenliveinterface(NULL),
|
||||
m_jobUiserver(nullptr),
|
||||
m_kdenliveinterface(nullptr),
|
||||
m_usekuiserver(usekuiserver),
|
||||
m_logfile(dest + ".txt"),
|
||||
m_logfile(dest + QStringLiteral(".txt")),
|
||||
m_erase(erase),
|
||||
m_seconds(0),
|
||||
m_frame(0),
|
||||
@@ -55,14 +54,18 @@ RenderJob::RenderJob(bool erase, bool usekuiserver, int pid, const QString& rend
|
||||
{
|
||||
m_renderProcess = new QProcess;
|
||||
m_renderProcess->setReadChannel(QProcess::StandardError);
|
||||
connect(m_renderProcess, SIGNAL(stateChanged(QProcess::ProcessState)), this, SLOT(slotCheckProcess(QProcess::ProcessState)));
|
||||
connect(m_renderProcess, &QProcess::stateChanged, this, &RenderJob::slotCheckProcess);
|
||||
|
||||
// Disable VDPAU so that rendering will work even if there is a Kdenlive instance using VDPAU
|
||||
qputenv("MLT_NO_VDPAU", "1");
|
||||
|
||||
m_args << scenelist;
|
||||
if (in != -1) m_args << QStringLiteral("in=") + QString::number(in);
|
||||
if (out != -1) m_args << QStringLiteral("out=") + QString::number(out);
|
||||
if (in != -1) {
|
||||
m_args << QStringLiteral("in=") + QString::number(in);
|
||||
}
|
||||
if (out != -1) {
|
||||
m_args << QStringLiteral("out=") + QString::number(out);
|
||||
}
|
||||
|
||||
m_args << preargs;
|
||||
if (scenelist.startsWith(QLatin1String("consumer:"))) {
|
||||
@@ -75,10 +78,12 @@ RenderJob::RenderJob(bool erase, bool usekuiserver, int pid, const QString& rend
|
||||
m_dualpass = args.contains(QStringLiteral("pass=1"));
|
||||
|
||||
// Create a log of every render process.
|
||||
if (!m_logfile.open(QIODevice::WriteOnly|QIODevice::Text)) qWarning() << "Unable to log to " << m_logfile.fileName();
|
||||
else m_logstream.setDevice(&m_logfile);
|
||||
if (!m_logfile.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
||||
qWarning() << "Unable to log to " << m_logfile.fileName();
|
||||
} else {
|
||||
m_logstream.setDevice(&m_logfile);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
RenderJob::~RenderJob()
|
||||
{
|
||||
@@ -93,7 +98,9 @@ void RenderJob::setLocale(const QString &locale)
|
||||
|
||||
void RenderJob::slotAbort(const QString &url)
|
||||
{
|
||||
if (m_dest == url) slotAbort();
|
||||
if (m_dest == url) {
|
||||
slotAbort();
|
||||
}
|
||||
}
|
||||
|
||||
void RenderJob::slotAbort()
|
||||
@@ -106,8 +113,12 @@ void RenderJob::slotAbort()
|
||||
m_dbusargs.append(QString());
|
||||
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, QStringLiteral("setRenderingFinished"), m_dbusargs);
|
||||
}
|
||||
if (m_jobUiserver) m_jobUiserver->call(QStringLiteral("terminate"), QString());
|
||||
if (m_erase) QFile(m_scenelist).remove();
|
||||
if (m_jobUiserver) {
|
||||
m_jobUiserver->call(QStringLiteral("terminate"), QString());
|
||||
}
|
||||
if (m_erase) {
|
||||
QFile(m_scenelist).remove();
|
||||
}
|
||||
QFile(m_dest).remove();
|
||||
m_logstream << "Job aborted by user" << endl;
|
||||
m_logstream.flush();
|
||||
@@ -123,7 +134,9 @@ void RenderJob::receivedStderr()
|
||||
} else {
|
||||
m_logstream << "melt: " << result << endl;
|
||||
int pro = result.section(QLatin1Char(' '), -1).toInt();
|
||||
if (pro <= m_progress || pro <= 0 || pro > 100) return;
|
||||
if (pro <= m_progress || pro <= 0 || pro > 100) {
|
||||
return;
|
||||
}
|
||||
m_progress = pro;
|
||||
if (m_args.contains(QStringLiteral("pass=1"))) {
|
||||
m_progress /= 2.0;
|
||||
@@ -138,10 +151,14 @@ void RenderJob::receivedStderr()
|
||||
if (m_jobUiserver) {
|
||||
m_jobUiserver->call(QStringLiteral("setPercent"), (uint) m_progress);
|
||||
int seconds = m_startTime.secsTo(QTime::currentTime());
|
||||
if (seconds == m_seconds) return;
|
||||
if (seconds < 0) seconds += 24*60*60;
|
||||
if (seconds == m_seconds) {
|
||||
return;
|
||||
}
|
||||
if (seconds < 0) {
|
||||
seconds += 24 * 60 * 60;
|
||||
}
|
||||
m_jobUiserver->call(QStringLiteral("setDescriptionField"), (uint) 0,
|
||||
QString(), tr("Remaining time: ") + QTime(0, 0, 0).addSecs((int) (seconds * (100 - m_progress) / m_progress)).toString("hh:mm:ss"));
|
||||
QString(), tr("Remaining time: ") + QTime(0, 0, 0).addSecs((int)(seconds * (100 - m_progress) / m_progress)).toString(QStringLiteral("hh:mm:ss")));
|
||||
//m_jobUiserver->call("setSpeed", (frame - m_frame) / (seconds - m_seconds));
|
||||
m_frame = frame;
|
||||
m_seconds = seconds;
|
||||
@@ -169,7 +186,7 @@ void RenderJob::start()
|
||||
|
||||
if (interface->isServiceRegistered(QStringLiteral("org.kde.JobViewServer"))) {
|
||||
QDBusInterface kuiserver(QStringLiteral("org.kde.JobViewServer"), QStringLiteral("/JobViewServer"), QStringLiteral("org.kde.JobViewServer"));
|
||||
QDBusReply<QDBusObjectPath> objectPath = kuiserver.asyncCall(QLatin1String("requestView"),QLatin1String("kdenlive"), QLatin1String("kdenlive"), 0x0001);
|
||||
QDBusReply<QDBusObjectPath> objectPath = kuiserver.asyncCall(QStringLiteral("requestView"), QLatin1String("kdenlive"), QLatin1String("kdenlive"), 0x0001);
|
||||
QString reply = ((QDBusObjectPath) objectPath).path();
|
||||
|
||||
// Use of the KDE JobViewServer is an ugly hack, it is not reliable
|
||||
@@ -177,10 +194,11 @@ void RenderJob::start()
|
||||
m_jobUiserver = new QDBusInterface(QStringLiteral("org.kde.JobViewServer"), reply, dbusView);
|
||||
if (m_jobUiserver && m_jobUiserver->isValid()) {
|
||||
m_startTime = QTime::currentTime();
|
||||
if (!m_args.contains(QStringLiteral("pass=2")))
|
||||
if (!m_args.contains(QStringLiteral("pass=2"))) {
|
||||
m_jobUiserver->call(QStringLiteral("setPercent"), (uint) 0);
|
||||
}
|
||||
|
||||
m_jobUiserver->call("setInfoMessage", tr("Rendering %1").arg(QFileInfo(m_dest).fileName()));
|
||||
m_jobUiserver->call(QStringLiteral("setInfoMessage"), tr("Rendering %1").arg(QFileInfo(m_dest).fileName()));
|
||||
QDBusConnection::sessionBus().connect(QStringLiteral("org.kde.JobViewServer"), reply, dbusView, QStringLiteral("cancelRequested"), this, SLOT(slotAbort()));
|
||||
}
|
||||
}
|
||||
@@ -188,19 +206,17 @@ void RenderJob::start()
|
||||
initKdenliveDbusInterface();
|
||||
|
||||
// Make sure the destination directory is writable
|
||||
QString path = QUrl::fromLocalFile(m_dest).toString(QUrl::RemoveFilename | QUrl::RemoveScheme);
|
||||
QFileInfo checkDestination(path);
|
||||
QFileInfo checkDestination(QFileInfo(m_dest).absolutePath());
|
||||
if (!checkDestination.isWritable()) {
|
||||
slotIsOver(QProcess::NormalExit, false);
|
||||
}
|
||||
|
||||
// Because of the logging, we connect to stderr in all cases.
|
||||
connect(m_renderProcess, SIGNAL(readyReadStandardError()), this, SLOT(receivedStderr()));
|
||||
connect(m_renderProcess, &QProcess::readyReadStandardError, this, &RenderJob::receivedStderr);
|
||||
m_renderProcess->start(m_prog, m_args);
|
||||
m_logstream << "Started render process: " << m_prog << ' ' << m_args.join(QStringLiteral(" ")) << endl;
|
||||
m_logstream << "Started render process: " << m_prog << ' ' << m_args.join(QLatin1Char(' ')) << endl;
|
||||
}
|
||||
|
||||
|
||||
void RenderJob::initKdenliveDbusInterface()
|
||||
{
|
||||
QString kdenliveId;
|
||||
@@ -210,15 +226,18 @@ void RenderJob::initKdenliveDbusInterface()
|
||||
if (!ibus->isServiceRegistered(kdenliveId)) {
|
||||
kdenliveId.clear();
|
||||
const QStringList services = ibus->registeredServiceNames();
|
||||
foreach(const QString & service, services) {
|
||||
if (!service.startsWith(QLatin1String("org.kde.kdenlive")))
|
||||
for (const QString &service : services) {
|
||||
if (!service.startsWith(QLatin1String("org.kde.kdenlive"))) {
|
||||
continue;
|
||||
}
|
||||
kdenliveId = service;
|
||||
break;
|
||||
}
|
||||
}
|
||||
m_dbusargs.clear();
|
||||
if (kdenliveId.isEmpty()) return;
|
||||
if (kdenliveId.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
m_kdenliveinterface = new QDBusInterface(kdenliveId,
|
||||
QStringLiteral("/kdenlive/MainWindow_1"),
|
||||
QStringLiteral("org.kde.kdenlive.rendering"),
|
||||
@@ -228,20 +247,20 @@ void RenderJob::initKdenliveDbusInterface()
|
||||
if (m_kdenliveinterface) {
|
||||
m_dbusargs.append(m_dest);
|
||||
m_dbusargs.append((int) 0);
|
||||
if (!m_args.contains(QStringLiteral("pass=2")))
|
||||
if (!m_args.contains(QStringLiteral("pass=2"))) {
|
||||
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, QStringLiteral("setRenderingProgress"), m_dbusargs);
|
||||
}
|
||||
connect(m_kdenliveinterface, SIGNAL(abortRenderJob(QString)),
|
||||
this, SLOT(slotAbort(QString)));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void RenderJob::slotCheckProcess(QProcess::ProcessState state)
|
||||
{
|
||||
if (state == QProcess::NotRunning) slotIsOver(m_renderProcess->exitStatus());
|
||||
if (state == QProcess::NotRunning) {
|
||||
slotIsOver(m_renderProcess->exitStatus());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void RenderJob::slotIsOver(QProcess::ExitStatus status, bool isWritable)
|
||||
{
|
||||
@@ -261,7 +280,9 @@ void RenderJob::slotIsOver(QProcess::ExitStatus status, bool isWritable)
|
||||
m_logstream << error << endl;
|
||||
qApp->quit();
|
||||
}
|
||||
if (m_erase) QFile(m_scenelist).remove();
|
||||
if (m_erase) {
|
||||
QFile(m_scenelist).remove();
|
||||
}
|
||||
if (status == QProcess::CrashExit || m_renderProcess->error() != QProcess::UnknownError || m_renderProcess->exitCode() != 0) {
|
||||
// rendering crashed
|
||||
if (m_kdenliveinterface) {
|
||||
@@ -286,7 +307,7 @@ void RenderJob::slotIsOver(QProcess::ExitStatus status, bool isWritable)
|
||||
QStringList args = m_player.split(QLatin1Char(' '));
|
||||
QString exec = args.takeFirst();
|
||||
// Decode url
|
||||
QString url = QUrl::fromEncoded(args.takeLast().toUtf8()).path();
|
||||
QString url = QUrl::fromEncoded(args.takeLast().toUtf8()).toLocalFile();
|
||||
args << url;
|
||||
QProcess::startDetached(exec, args);
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#ifndef RENDERJOB_H
|
||||
#define RENDERJOB_H
|
||||
|
||||
|
||||
@@ -1,9 +1,3 @@
|
||||
set(QT_USE_QTDBUS 1)
|
||||
set(QT_USE_QTOPENGL 1)
|
||||
set(QT_USE_QTSCRIPT 1)
|
||||
set(QT_USE_QTSVG 1)
|
||||
set(QT_USE_QTXML 1)
|
||||
|
||||
add_definitions(${Qt5Gui_DEFINITIONS})
|
||||
if(${Qt5Gui_OPENGL_IMPLEMENTATION} STREQUAL "GL")
|
||||
find_package(OpenGL REQUIRED)
|
||||
@@ -21,6 +15,22 @@ else()
|
||||
PURPOSE "")
|
||||
endif()
|
||||
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -pedantic -Wextra")
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcast-qual -Wcast-align -Wfloat-equal -Wpointer-arith")
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wunreachable-code -Wchar-subscripts -Wcomment -Wformat")
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror-implicit-function-declaration -Wmain -Wmissing-braces")
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wparentheses -Wsequence-point -Wreturn-type -Wswitch")
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wuninitialized -Wreorder -Wundef -Wshadow -Wwrite-strings")
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsign-compare -Wconversion")
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wmissing-noreturn -Wsign-conversion -Wunused ")
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wstrict-aliasing -Wstrict-overflow -Wconversion")
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wdisabled-optimization")
|
||||
if (CMAKE_COMPILER_IS_GNUCXX)
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wlogical-op -Wunsafe-loop-optimizations ")
|
||||
endif()
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wunused-parameter -Wshadow -Wno-variadic-macros -Wno-float-conversion")
|
||||
|
||||
if(NOT WIN32)
|
||||
find_package(PkgConfig QUIET)
|
||||
execute_process(
|
||||
COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=mltdatadir mlt-framework
|
||||
@@ -28,8 +38,7 @@ execute_process(
|
||||
RESULT_VARIABLE MLT_DATADIR_failed)
|
||||
if (NOT MLT_DATADIR_failed)
|
||||
string(REGEX REPLACE "[\r\n]" "" MLT_DATADIR "${MLT_DATADIR}")
|
||||
add_definitions(-DMLT_DATADIR=\"${MLT_DATADIR}\")
|
||||
endif(NOT MLT_DATADIR_failed)
|
||||
endif()
|
||||
|
||||
execute_process(
|
||||
COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=meltbin mlt-framework
|
||||
@@ -37,8 +46,14 @@ execute_process(
|
||||
RESULT_VARIABLE MLT_MELTBIN_failed)
|
||||
if (NOT MLT_MELTBIN_failed)
|
||||
string(REGEX REPLACE "[\r\n]" "" MLT_MELTBIN "${MLT_MELTBIN}")
|
||||
add_definitions(-DMLT_MELTBIN=\"${MLT_MELTBIN}\")
|
||||
endif(NOT MLT_MELTBIN_failed)
|
||||
endif()
|
||||
else()
|
||||
set(MLT_MELTBIN "melt.exe")
|
||||
set(MLT_DATADIR "../share/mlt")
|
||||
endif()
|
||||
|
||||
configure_file( mlt_config.h.in ${CMAKE_BINARY_DIR}/generated/mlt_config.h )
|
||||
include_directories( ${CMAKE_BINARY_DIR}/generated/ ) # Make sure it can be included...
|
||||
|
||||
option(WITH_JogShuttle "Build Jog/Shuttle support" ON)
|
||||
|
||||
@@ -55,13 +70,7 @@ if(WITH_JogShuttle)
|
||||
if(HAVE_LINUX_INPUT_H)
|
||||
set(BUILD_JogShuttle TRUE)
|
||||
endif(HAVE_LINUX_INPUT_H)
|
||||
endif(WITH_JogShuttle)
|
||||
|
||||
set_package_properties(LibV4L2 PROPERTIES
|
||||
DESCRIPTION "Collection of video4linux support libraries"
|
||||
URL "http://freecode.com/projects/libv4l"
|
||||
TYPE RUNTIME
|
||||
PURPOSE "Required for better webcam support")
|
||||
endif()
|
||||
|
||||
set_package_properties(OpenGL PROPERTIES
|
||||
DESCRIPTION "the OpenGL library"
|
||||
@@ -83,6 +92,8 @@ set_package_properties(QtScript PROPERTIES
|
||||
# TRUE
|
||||
# )
|
||||
#endif(APPLE)
|
||||
#add_definitions( -DQT_NO_CAST_FROM_ASCII )
|
||||
#add_definitions( -DQT_NO_CAST_TO_ASCII )
|
||||
|
||||
install(FILES kdenlivesettings.kcfg DESTINATION ${KCFG_INSTALL_DIR})
|
||||
kconfig_add_kcfg_files(kdenlive_SRCS kdenlivesettings.kcfgc)
|
||||
@@ -107,9 +118,12 @@ add_subdirectory(onmonitoritems/rotoscoping)
|
||||
add_subdirectory(mltcontroller)
|
||||
add_subdirectory(bin)
|
||||
add_subdirectory(qml)
|
||||
add_subdirectory(profiles)
|
||||
|
||||
if (Qt5WebKitWidgets_FOUND)
|
||||
add_subdirectory(qt-oauth-lib)
|
||||
endif(Qt5WebKitWidgets_FOUND)
|
||||
endif()
|
||||
|
||||
add_subdirectory(library)
|
||||
|
||||
list(APPEND kdenlive_SRCS
|
||||
@@ -129,13 +143,15 @@ list(APPEND kdenlive_SRCS
|
||||
core.cpp
|
||||
)
|
||||
|
||||
ecm_qt_declare_logging_category(kdenlive_SRCS HEADER kdenlive_debug.h IDENTIFIER KDENLIVE_LOG CATEGORY_NAME org.kde.multimedia.kdenlive)
|
||||
|
||||
ki18n_wrap_ui(kdenlive_UIS
|
||||
ui/addtrack_ui.ui
|
||||
ui/archivewidget_ui.ui
|
||||
ui/audiospectrum_ui.ui
|
||||
ui/backupdialog_ui.ui
|
||||
ui/bezierspline_ui.ui
|
||||
ui/boolval_ui.ui
|
||||
ui/boolparamwidget_ui.ui
|
||||
ui/clipdurationdialog_ui.ui
|
||||
ui/clipproperties_ui.ui
|
||||
ui/cliptranscode_ui.ui
|
||||
@@ -157,13 +173,12 @@ ki18n_wrap_ui(kdenlive_UIS
|
||||
ui/dvdwizardvob_ui.ui
|
||||
ui/effectlist_ui.ui
|
||||
ui/freesound_ui.ui
|
||||
ui/geometryval_ui.ui
|
||||
ui/geometrywidget_ui.ui
|
||||
ui/histogram_ui.ui
|
||||
ui/keyframedialog_ui.ui
|
||||
ui/keyframeeditor_ui.ui
|
||||
ui/keyframewidget_ui.ui
|
||||
ui/listval_ui.ui
|
||||
ui/listparamwidget_ui.ui
|
||||
ui/logindialog_ui.ui
|
||||
ui/managecaptures_ui.ui
|
||||
ui/manageencodingprofile_ui.ui
|
||||
@@ -215,7 +230,11 @@ if(BUILD_JogShuttle)
|
||||
jogshuttle/jogshuttle.cpp
|
||||
jogshuttle/jogshuttleconfig.cpp
|
||||
)
|
||||
endif(BUILD_JogShuttle)
|
||||
endif()
|
||||
|
||||
# Sets the icon on Windows and OSX
|
||||
file(GLOB ICONS_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/../data/icons/*-apps-kdenlive.png")
|
||||
ecm_add_app_icon(kdenlive_SRCS ICONS ${ICONS_SRCS})
|
||||
|
||||
qt5_add_dbus_adaptor(kdenlive_SRCS
|
||||
org.kdenlive.MainWindow.xml
|
||||
@@ -263,8 +282,6 @@ target_link_libraries(kdenlive
|
||||
KF5::Notifications
|
||||
KF5::TextWidgets
|
||||
KF5::IconThemes
|
||||
KF5::Crash
|
||||
${Qt5_LIBRARIES}
|
||||
Qt5::Svg
|
||||
${OPENGL_LIBRARIES}
|
||||
${OPENGLES_LIBRARIES}
|
||||
@@ -282,7 +299,20 @@ if (KF5_FILEMETADATA)
|
||||
target_link_libraries(kdenlive KF5::FileMetaData)
|
||||
endif()
|
||||
|
||||
qt5_use_modules( kdenlive Script Widgets Concurrent Qml Quick)
|
||||
if (DRMINGW_FOUND)
|
||||
add_definitions(-DUSE_DRMINGW)
|
||||
target_link_libraries(kdenlive ${DRMINGW_LIBRARY})
|
||||
elseif (KF5Crash_FOUND)
|
||||
add_definitions(-DKF5_USE_CRASH)
|
||||
target_link_libraries(kdenlive KF5::Crash)
|
||||
endif(DRMINGW_FOUND)
|
||||
|
||||
target_link_libraries(kdenlive Qt5::Script Qt5::Widgets Qt5::Concurrent Qt5::Qml Qt5::Quick)
|
||||
|
||||
if (KF5_PURPOSE)
|
||||
add_definitions(-DKF5_USE_PURPOSE)
|
||||
target_link_libraries(kdenlive KF5::Purpose KF5::PurposeWidgets)
|
||||
endif()
|
||||
|
||||
if (Qt5WebKitWidgets_FOUND)
|
||||
message(STATUS "Found Qt5 WebKitWidgets. You can use your Freesound.org credentials to download files")
|
||||
@@ -298,9 +328,11 @@ if(Q_WS_X11)
|
||||
target_link_libraries(kdenlive ${X11_LIBRARIES})
|
||||
endif(Q_WS_X11)
|
||||
|
||||
if(SDL_FOUND)
|
||||
if(SDL2_FOUND)
|
||||
target_link_libraries(kdenlive ${SDL2_LIBRARY})
|
||||
elseif(SDL_FOUND)
|
||||
target_link_libraries(kdenlive ${SDL_LIBRARY})
|
||||
endif(SDL_FOUND)
|
||||
endif(SDL2_FOUND)
|
||||
|
||||
if(LIBV4L2_FOUND)
|
||||
include_directories(${LIBV4L2_INCLUDE_DIR})
|
||||
|
||||
@@ -33,21 +33,18 @@
|
||||
#include <mlt++/Mlt.h>
|
||||
#include "iecscale.h"
|
||||
|
||||
|
||||
// Code borrowed from Shotcut's audiospectum by Brian Matherly <code@brianmatherly.com> (GPL)
|
||||
|
||||
static const int WINDOW_SIZE = 8000; // 6 Hz FFT bins at 48kHz
|
||||
|
||||
struct band
|
||||
{
|
||||
struct band {
|
||||
float low; // Low frequency
|
||||
float high; // High frequency
|
||||
const char *label;
|
||||
};
|
||||
|
||||
// Preferred frequencies from ISO R 266-1997 / ANSI S1.6-1984
|
||||
static const band BAND_TAB[] =
|
||||
{
|
||||
static const band BAND_TAB[] = {
|
||||
// Low Preferred High Band
|
||||
// Freq Center Freq Label Num
|
||||
{ 1.12, 1.25, 1.41, "1.25" }, // 1
|
||||
@@ -99,7 +96,6 @@ static const int FIRST_AUDIBLE_BAND_INDEX = 12;
|
||||
static const int LAST_AUDIBLE_BAND_INDEX = 42;
|
||||
static const int AUDIBLE_BAND_COUNT = LAST_AUDIBLE_BAND_INDEX - FIRST_AUDIBLE_BAND_INDEX + 1;
|
||||
|
||||
|
||||
EqualizerWidget::EqualizerWidget(QWidget *parent) : QWidget(parent)
|
||||
{
|
||||
QGridLayout *box = new QGridLayout(this);
|
||||
@@ -138,7 +134,9 @@ void AudioGraphWidget::drawDbLabels(QPainter& p, const QRect &rect)
|
||||
int dbLabelCount = m_dbLabels.size();
|
||||
int textHeight = fontMetrics().ascent();
|
||||
|
||||
if (dbLabelCount == 0) return;
|
||||
if (dbLabelCount == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
int maxWidth = fontMetrics().width(QStringLiteral("-50"));
|
||||
// dB scale is vertical along the left side
|
||||
@@ -171,7 +169,9 @@ void AudioGraphWidget::drawChanLabels(QPainter& p, const QRect &rect, int barWid
|
||||
int chanLabelCount = m_freqLabels.size();
|
||||
int stride = 1;
|
||||
|
||||
if (chanLabelCount == 0) return;
|
||||
if (chanLabelCount == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
p.setPen(palette().text().color().rgb());
|
||||
|
||||
@@ -209,9 +209,13 @@ void AudioGraphWidget::resizeEvent ( QResizeEvent * event )
|
||||
void AudioGraphWidget::drawBackground()
|
||||
{
|
||||
QSize size(width(), height());
|
||||
if (!size.isValid()) return;
|
||||
if (!size.isValid()) {
|
||||
return;
|
||||
}
|
||||
m_pixmap = QPixmap(size);
|
||||
if (m_pixmap.isNull()) return;
|
||||
if (m_pixmap.isNull()) {
|
||||
return;
|
||||
}
|
||||
m_pixmap.fill(palette().base().color());
|
||||
QPainter p(&m_pixmap);
|
||||
QRect rect(0, 0, width() - 3, height());
|
||||
@@ -220,8 +224,9 @@ void AudioGraphWidget::drawBackground()
|
||||
int offset = fontMetrics().width(QStringLiteral("888")) + 2;
|
||||
rect.adjust(offset, 0, 0, 0);
|
||||
int barWidth = (rect.width() - (2 * (AUDIBLE_BAND_COUNT - 1))) / AUDIBLE_BAND_COUNT;
|
||||
if (barWidth > 0)
|
||||
if (barWidth > 0) {
|
||||
drawChanLabels(p, rect, barWidth);
|
||||
}
|
||||
rect.adjust(0, 0, 0, -fontMetrics().height());
|
||||
m_rect = rect;
|
||||
}
|
||||
@@ -231,7 +236,9 @@ void AudioGraphWidget::paintEvent(QPaintEvent *pe)
|
||||
QPainter p(this);
|
||||
p.setClipRect(pe->rect());
|
||||
p.drawPixmap(0, 0, m_pixmap);
|
||||
if (m_levels.isEmpty()) return;
|
||||
if (m_levels.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
int chanCount = m_levels.size();
|
||||
int height = m_rect.height();
|
||||
int barWidth = (m_rect.width() - (2 * (AUDIBLE_BAND_COUNT - 1))) / AUDIBLE_BAND_COUNT;
|
||||
@@ -287,13 +294,16 @@ AudioGraphSpectrum::~AudioGraphSpectrum()
|
||||
|
||||
void AudioGraphSpectrum::refreshPixmap()
|
||||
{
|
||||
if (m_graphWidget)
|
||||
if (m_graphWidget) {
|
||||
m_graphWidget->drawBackground();
|
||||
}
|
||||
}
|
||||
|
||||
void AudioGraphSpectrum::processSpectrum(const SharedFrame &frame)
|
||||
{
|
||||
if (!isVisible()) return;
|
||||
if (!isVisible()) {
|
||||
return;
|
||||
}
|
||||
mlt_audio_format format = mlt_audio_s16;
|
||||
int channels = frame.get_audio_channels();
|
||||
int frequency = frame.get_audio_frequency();
|
||||
|
||||
@@ -34,9 +34,9 @@
|
||||
#include <QVector>
|
||||
#include <QPixmap>
|
||||
|
||||
namespace Mlt {
|
||||
namespace Mlt
|
||||
{
|
||||
class Filter;
|
||||
class Consumer;
|
||||
}
|
||||
|
||||
class MonitorManager;
|
||||
@@ -45,7 +45,7 @@ class EqualizerWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit EqualizerWidget(QWidget *parent = 0);
|
||||
explicit EqualizerWidget(QWidget *parent = nullptr);
|
||||
|
||||
};
|
||||
|
||||
@@ -53,7 +53,7 @@ class AudioGraphWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit AudioGraphWidget(QWidget *parent = 0);
|
||||
explicit AudioGraphWidget(QWidget *parent = nullptr);
|
||||
void drawBackground();
|
||||
|
||||
public slots:
|
||||
@@ -74,12 +74,11 @@ private:
|
||||
void drawChanLabels(QPainter &p, const QRect &rect, int barWidth);
|
||||
};
|
||||
|
||||
|
||||
class AudioGraphSpectrum : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
AudioGraphSpectrum(MonitorManager *manager, QWidget *parent = 0);
|
||||
AudioGraphSpectrum(MonitorManager *manager, QWidget *parent = nullptr);
|
||||
virtual ~AudioGraphSpectrum();
|
||||
private:
|
||||
MonitorManager *m_manager;
|
||||
|
||||
@@ -25,20 +25,21 @@ static inline double IEC_Scale(double dB)
|
||||
{
|
||||
double fScale = 1.0f;
|
||||
|
||||
if (dB < -70.0f)
|
||||
if (dB < -70.0f) {
|
||||
fScale = 0.0f;
|
||||
else if (dB < -60.0f)
|
||||
} else if (dB < -60.0f) {
|
||||
fScale = (dB + 70.0f) * 0.0025f;
|
||||
else if (dB < -50.0f)
|
||||
} else if (dB < -50.0f) {
|
||||
fScale = (dB + 60.0f) * 0.005f + 0.025f;
|
||||
else if (dB < -40.0)
|
||||
} else if (dB < -40.0) {
|
||||
fScale = (dB + 50.0f) * 0.0075f + 0.075f;
|
||||
else if (dB < -30.0f)
|
||||
} else if (dB < -30.0f) {
|
||||
fScale = (dB + 40.0f) * 0.015f + 0.15f;
|
||||
else if (dB < -20.0f)
|
||||
} else if (dB < -20.0f) {
|
||||
fScale = (dB + 30.0f) * 0.02f + 0.3f;
|
||||
else if (dB < -0.001f || dB > 0.001f) /* if (dB < 0.0f) */
|
||||
} else if (dB < -0.001f || dB > 0.001f) { /* if (dB < 0.0f) */
|
||||
fScale = (dB + 20.0f) * 0.025f + 0.5f;
|
||||
}
|
||||
|
||||
return fScale;
|
||||
}
|
||||
|
||||
@@ -26,7 +26,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include <QDomElement>
|
||||
#include <QVariant>
|
||||
#include <QPainter>
|
||||
#include <QDebug>
|
||||
|
||||
AbstractProjectItem::AbstractProjectItem(PROJECTITEMTYPE type, const QString &id, AbstractProjectItem *parent) :
|
||||
QObject()
|
||||
@@ -104,7 +103,6 @@ const QString &AbstractProjectItem::clipId() const
|
||||
return m_id;
|
||||
}
|
||||
|
||||
|
||||
void AbstractProjectItem::setParent(AbstractProjectItem *parent)
|
||||
{
|
||||
if (m_parent != parent) {
|
||||
@@ -125,7 +123,7 @@ Bin* AbstractProjectItem::bin()
|
||||
if (m_parent) {
|
||||
return m_parent->bin();
|
||||
}
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
QPixmap AbstractProjectItem::roundedPixmap(const QPixmap &source)
|
||||
@@ -173,7 +171,6 @@ AbstractProjectItem::PROJECTITEMTYPE AbstractProjectItem::itemType() const
|
||||
return m_itemType;
|
||||
}
|
||||
|
||||
|
||||
QVariant AbstractProjectItem::data(DataType type) const
|
||||
{
|
||||
QVariant data;
|
||||
@@ -268,4 +265,3 @@ AbstractProjectItem::CLIPSTATUS AbstractProjectItem::clipStatus() const
|
||||
return m_clipStatus;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -35,8 +35,6 @@ class Bin;
|
||||
class QDomElement;
|
||||
class QDomDocument;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @class AbstractProjectItem
|
||||
* @brief Base class for all project items (clips, folders, ...).
|
||||
@@ -44,7 +42,6 @@ class QDomDocument;
|
||||
* Project items are stored in a tree like structure ...
|
||||
*/
|
||||
|
||||
|
||||
class AbstractProjectItem : public QObject, public QList<AbstractProjectItem *>
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -62,7 +59,7 @@ public:
|
||||
* @brief Constructor.
|
||||
* @param parent parent this item should be added to
|
||||
*/
|
||||
AbstractProjectItem(PROJECTITEMTYPE type, const QString &id, AbstractProjectItem *parent = 0);
|
||||
AbstractProjectItem(PROJECTITEMTYPE type, const QString &id, AbstractProjectItem *parent = nullptr);
|
||||
/**
|
||||
* @brief Creates a project item upon project load.
|
||||
* @param description element for this item.
|
||||
@@ -70,7 +67,7 @@ public:
|
||||
*
|
||||
* We try to read the attributes "name" and "description"
|
||||
*/
|
||||
AbstractProjectItem(PROJECTITEMTYPE type, const QDomElement &description, AbstractProjectItem* parent = 0);
|
||||
AbstractProjectItem(PROJECTITEMTYPE type, const QDomElement &description, AbstractProjectItem *parent = nullptr);
|
||||
virtual ~AbstractProjectItem();
|
||||
|
||||
bool operator==(const AbstractProjectItem *projectItem) const;
|
||||
@@ -90,7 +87,7 @@ public:
|
||||
|
||||
/**
|
||||
* @brief Removes a child item and notifies the bin model about it (before and after).
|
||||
* @param child project which sould be removed from the child list
|
||||
* @param child project which should be removed from the child list
|
||||
*
|
||||
* This function is called when a child's parent is changed through setParent
|
||||
*/
|
||||
@@ -138,7 +135,7 @@ public:
|
||||
DataDate,
|
||||
// Description for item (user editable)
|
||||
DataDescription,
|
||||
// Number of occurences used in timeline
|
||||
// Number of occurrences used in timeline
|
||||
UsageCount,
|
||||
// Empty if clip has no effect, icon otherwise
|
||||
IconOverlay,
|
||||
|
||||
1257
src/bin/bin.cpp
328
src/bin/bin.h
@@ -60,20 +60,23 @@ class ProjectSortProxyModel;
|
||||
class JobManager;
|
||||
class ProjectFolderUp;
|
||||
class InvalidDialog;
|
||||
class BinItemDelegate;
|
||||
class BinMessageWidget;
|
||||
class SmallJobLabel;
|
||||
|
||||
namespace Mlt {
|
||||
namespace Mlt
|
||||
{
|
||||
class Producer;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
class MyListView: public QListView
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit MyListView(QWidget *parent = 0);
|
||||
explicit MyListView(QWidget *parent = nullptr);
|
||||
|
||||
protected:
|
||||
void focusInEvent(QFocusEvent *event);
|
||||
void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
|
||||
signals:
|
||||
void focusView();
|
||||
};
|
||||
@@ -83,23 +86,23 @@ class MyTreeView: public QTreeView
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(bool editing READ isEditing WRITE setEditing)
|
||||
public:
|
||||
explicit MyTreeView(QWidget *parent = 0);
|
||||
explicit MyTreeView(QWidget *parent = nullptr);
|
||||
void setEditing(bool edit);
|
||||
protected:
|
||||
void mousePressEvent(QMouseEvent *event);
|
||||
void mouseMoveEvent(QMouseEvent * event);
|
||||
void focusInEvent(QFocusEvent *event);
|
||||
void keyPressEvent(QKeyEvent* event);
|
||||
void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
|
||||
void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
|
||||
void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
|
||||
void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
|
||||
|
||||
protected slots:
|
||||
void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint);
|
||||
void editorDestroyed(QObject *editor);
|
||||
void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint) Q_DECL_OVERRIDE;
|
||||
void editorDestroyed(QObject *editor) Q_DECL_OVERRIDE;
|
||||
|
||||
private:
|
||||
QPoint m_startPos;
|
||||
bool m_editing;
|
||||
bool performDrag();
|
||||
bool isEditing();
|
||||
bool isEditing() const;
|
||||
|
||||
signals:
|
||||
void focusView();
|
||||
@@ -109,22 +112,21 @@ class BinMessageWidget: public KMessageWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit BinMessageWidget(QWidget *parent = 0);
|
||||
BinMessageWidget(const QString &text, QWidget *parent = 0);
|
||||
explicit BinMessageWidget(QWidget *parent = nullptr);
|
||||
BinMessageWidget(const QString &text, QWidget *parent = nullptr);
|
||||
|
||||
protected:
|
||||
bool event(QEvent* ev);
|
||||
bool event(QEvent *ev) Q_DECL_OVERRIDE;
|
||||
|
||||
signals:
|
||||
void messageClosing();
|
||||
};
|
||||
|
||||
|
||||
class SmallJobLabel: public QPushButton
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit SmallJobLabel(QWidget *parent = 0);
|
||||
explicit SmallJobLabel(QWidget *parent = nullptr);
|
||||
static const QString getStyleSheet(const QPalette &p);
|
||||
void setAction(QAction *action);
|
||||
private:
|
||||
@@ -145,203 +147,14 @@ private slots:
|
||||
void slotTimeLineFinished();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @class BinItemDelegate
|
||||
* @brief This class is responsible for drawing items in the QTreeView.
|
||||
*/
|
||||
|
||||
class BinItemDelegate: public QStyledItemDelegate
|
||||
{
|
||||
public:
|
||||
explicit BinItemDelegate(QObject* parent = 0): QStyledItemDelegate(parent)
|
||||
{
|
||||
}
|
||||
|
||||
void updateEditorGeometry(QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index) const
|
||||
{
|
||||
if (index.column() != 0) {
|
||||
return QStyledItemDelegate::updateEditorGeometry(editor, option, index);
|
||||
}
|
||||
QStyleOptionViewItem opt = option;
|
||||
initStyleOption(&opt, index);
|
||||
QRect r1 = option.rect;
|
||||
QStyle *style = opt.widget ? opt.widget->style() : QApplication::style();
|
||||
const int textMargin = style->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1;
|
||||
int type = index.data(AbstractProjectItem::ItemTypeRole).toInt();
|
||||
double factor = (double) opt.decorationSize.height() / r1.height();
|
||||
int decoWidth = 2 * textMargin;
|
||||
int mid = 0;
|
||||
if (factor != 0) {
|
||||
decoWidth += opt.decorationSize.width() / factor;
|
||||
}
|
||||
if (type == AbstractProjectItem::ClipItem || type == AbstractProjectItem::SubClipItem) {
|
||||
mid = (int)((r1.height() / 2));
|
||||
}
|
||||
r1.adjust(decoWidth, 0, 0, -mid);
|
||||
QFont ft = option.font;
|
||||
ft.setBold(true);
|
||||
QFontMetricsF fm(ft);
|
||||
QRect r2 =fm.boundingRect(r1, Qt::AlignLeft | Qt::AlignTop, index.data(AbstractProjectItem::DataName).toString()).toRect();
|
||||
editor->setGeometry( r2 );
|
||||
}
|
||||
|
||||
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
|
||||
{
|
||||
QSize hint = QStyledItemDelegate::sizeHint(option, index);
|
||||
QString text = index.data(AbstractProjectItem::DataName).toString();
|
||||
QRectF r = option.rect;
|
||||
QFont ft = option.font;
|
||||
ft.setBold(true);
|
||||
QFontMetricsF fm(ft);
|
||||
QStyle *style = option.widget ? option.widget->style() : QApplication::style();
|
||||
const int textMargin = style->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1;
|
||||
int width = fm.boundingRect(r, Qt::AlignLeft | Qt::AlignTop, text).width() + option.decorationSize.width() + 2 * textMargin;
|
||||
hint.setWidth(width);
|
||||
int type = index.data(AbstractProjectItem::ItemTypeRole).toInt();
|
||||
if (type == AbstractProjectItem::FolderItem || type == AbstractProjectItem::FolderUpItem) {
|
||||
return QSize(hint.width(), qMin(option.fontMetrics.lineSpacing() + 4, hint.height()));
|
||||
}
|
||||
if (type == AbstractProjectItem::ClipItem) {
|
||||
return QSize(hint.width(), qMax(option.fontMetrics.lineSpacing() * 2 + 4, qMax(hint.height(), option.decorationSize.height())));
|
||||
}
|
||||
if (type == AbstractProjectItem::SubClipItem) {
|
||||
return QSize(hint.width(), qMax(option.fontMetrics.lineSpacing() * 2 + 4, qMin(hint.height(), (int) (option.decorationSize.height() / 1.5))));
|
||||
}
|
||||
QIcon icon = qvariant_cast<QIcon>(index.data(Qt::DecorationRole));
|
||||
QString line1 = index.data(Qt::DisplayRole).toString();
|
||||
QString line2 = index.data(Qt::UserRole).toString();
|
||||
|
||||
int textW = qMax(option.fontMetrics.width(line1), option.fontMetrics.width(line2));
|
||||
QSize iconSize = icon.actualSize(option.decorationSize);
|
||||
return QSize(qMax(textW, iconSize.width()) + 4, option.fontMetrics.lineSpacing() * 2 + 4);
|
||||
}
|
||||
|
||||
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const {
|
||||
if (index.column() == 0 && !index.data().isNull()) {
|
||||
QRect r1 = option.rect;
|
||||
painter->save();
|
||||
painter->setClipRect(r1);
|
||||
QStyleOptionViewItem opt(option);
|
||||
initStyleOption(&opt, index);
|
||||
int type = index.data(AbstractProjectItem::ItemTypeRole).toInt();
|
||||
QStyle *style = opt.widget ? opt.widget->style() : QApplication::style();
|
||||
const int textMargin = style->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1;
|
||||
//QRect r = QStyle::alignedRect(opt.direction, Qt::AlignVCenter | Qt::AlignLeft, opt.decorationSize, r1);
|
||||
|
||||
style->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, opt.widget);
|
||||
if (option.state & QStyle::State_Selected) {
|
||||
painter->setPen(option.palette.highlightedText().color());
|
||||
}
|
||||
else painter->setPen(option.palette.text().color());
|
||||
QRect r = r1;
|
||||
QFont font = painter->font();
|
||||
font.setBold(true);
|
||||
painter->setFont(font);
|
||||
if (type == AbstractProjectItem::ClipItem || type == AbstractProjectItem::SubClipItem) {
|
||||
double factor = (double) opt.decorationSize.height() / r1.height();
|
||||
int decoWidth = 2 * textMargin;
|
||||
if (factor != 0) {
|
||||
r.setWidth(opt.decorationSize.width() / factor);
|
||||
// Draw thumbnail
|
||||
opt.icon.paint(painter, r);
|
||||
decoWidth += r.width();
|
||||
}
|
||||
int mid = (int)((r1.height() / 2));
|
||||
r1.adjust(decoWidth, 0, 0, -mid);
|
||||
QRect r2 = option.rect;
|
||||
r2.adjust(decoWidth, mid, 0, 0);
|
||||
QRectF bounding;
|
||||
painter->drawText(r1, Qt::AlignLeft | Qt::AlignTop, index.data(AbstractProjectItem::DataName).toString(), &bounding);
|
||||
font.setBold(false);
|
||||
painter->setFont(font);
|
||||
QString subText = index.data(AbstractProjectItem::DataDuration).toString();
|
||||
if (!subText.isEmpty()) {
|
||||
r2.adjust(0, bounding.bottom() - r2.top(), 0, 0);
|
||||
QColor subTextColor = painter->pen().color();
|
||||
subTextColor.setAlphaF(.5);
|
||||
painter->setPen(subTextColor);
|
||||
painter->drawText(r2, Qt::AlignLeft | Qt::AlignTop , subText, &bounding);
|
||||
// Draw usage counter
|
||||
int usage = index.data(AbstractProjectItem::UsageCount).toInt();
|
||||
if (usage > 0) {
|
||||
bounding.moveLeft(bounding.right() + (2 * textMargin));
|
||||
QString us = QString().sprintf("[%d]", usage);
|
||||
painter->drawText(bounding, Qt::AlignLeft | Qt::AlignTop , us, &bounding);
|
||||
}
|
||||
}
|
||||
if (type == AbstractProjectItem::ClipItem) {
|
||||
// Overlay icon if necessary
|
||||
QVariant v = index.data(AbstractProjectItem::IconOverlay);
|
||||
if (!v.isNull()) {
|
||||
QIcon reload = QIcon::fromTheme(v.toString());
|
||||
r.setTop(r.bottom() - bounding.height());
|
||||
r.setWidth(bounding.height());
|
||||
reload.paint(painter, r);
|
||||
}
|
||||
|
||||
int jobProgress = index.data(AbstractProjectItem::JobProgress).toInt();
|
||||
if (jobProgress > 0 || jobProgress == JobWaiting) {
|
||||
// Draw job progress bar
|
||||
int progressWidth = option.fontMetrics.averageCharWidth() * 8;
|
||||
int progressHeight = option.fontMetrics.ascent() / 4;
|
||||
QRect progress(r1.x() + 1, opt.rect.bottom() - progressHeight - 2, progressWidth , progressHeight);
|
||||
painter->setPen(Qt::NoPen);
|
||||
painter->setBrush(Qt::darkGray);
|
||||
if (jobProgress > 0) {
|
||||
painter->drawRoundedRect(progress, 2, 2);
|
||||
painter->setBrush(option.state & QStyle::State_Selected ? option.palette.text() : option.palette.highlight());
|
||||
progress.setWidth((progressWidth - 2) * jobProgress / 100);
|
||||
painter->drawRoundedRect(progress, 2, 2);
|
||||
} else if (jobProgress == JobWaiting) {
|
||||
// Draw kind of a pause icon
|
||||
progress.setWidth(3);
|
||||
painter->drawRect(progress);
|
||||
progress.moveLeft(progress.right() + 3);
|
||||
painter->drawRect(progress);
|
||||
}
|
||||
} else if (jobProgress == JobCrashed) {
|
||||
QString jobText = index.data(AbstractProjectItem::JobMessage).toString();
|
||||
if (!jobText.isEmpty()) {
|
||||
QRectF txtBounding = painter->boundingRect(r2, Qt::AlignRight | Qt::AlignVCenter, " " + jobText + " ");
|
||||
painter->setPen(Qt::NoPen);
|
||||
painter->setBrush(option.palette.highlight());
|
||||
painter->drawRoundedRect(txtBounding, 2, 2);
|
||||
painter->setPen(option.palette.highlightedText().color());
|
||||
painter->drawText(txtBounding, Qt::AlignCenter, jobText);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Folder or Folder Up items
|
||||
double factor = (double) opt.decorationSize.height() / r1.height();
|
||||
int decoWidth = 2 * textMargin;
|
||||
if (factor != 0) {
|
||||
r.setWidth(opt.decorationSize.width() / factor);
|
||||
// Draw thumbnail
|
||||
opt.icon.paint(painter, r);
|
||||
decoWidth += r.width();
|
||||
}
|
||||
r1.adjust(decoWidth, 0, 0, 0);
|
||||
QRectF bounding;
|
||||
painter->drawText(r1, Qt::AlignLeft | Qt::AlignTop, index.data(AbstractProjectItem::DataName).toString(), &bounding);
|
||||
}
|
||||
painter->restore();
|
||||
} else {
|
||||
QStyledItemDelegate::paint(painter, option, index);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class LineEventEater : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit LineEventEater(QObject *parent = 0);
|
||||
explicit LineEventEater(QObject *parent = nullptr);
|
||||
|
||||
protected:
|
||||
bool eventFilter(QObject *obj, QEvent *event);
|
||||
bool eventFilter(QObject *obj, QEvent *event) Q_DECL_OVERRIDE;
|
||||
|
||||
signals:
|
||||
void clearSearchLine();
|
||||
@@ -362,7 +175,7 @@ class Bin : public QWidget
|
||||
enum BinViewType {BinTreeView, BinIconView };
|
||||
|
||||
public:
|
||||
explicit Bin(QWidget* parent = 0);
|
||||
explicit Bin(QWidget *parent = nullptr);
|
||||
~Bin();
|
||||
|
||||
bool isLoading;
|
||||
@@ -374,7 +187,7 @@ public:
|
||||
ProjectFolder *rootFolder();
|
||||
|
||||
/** @brief Create a clip item from its xml description */
|
||||
void createClip(QDomElement xml);
|
||||
void createClip(const QDomElement &xml);
|
||||
|
||||
/** @brief Used to notify the Model View that an item was updated */
|
||||
void emitItemUpdated(AbstractProjectItem *item);
|
||||
@@ -401,14 +214,16 @@ public:
|
||||
/** @brief Start a job of selected type for a clip */
|
||||
void startJob(const QString &id, AbstractClipJob::JOBTYPE type);
|
||||
|
||||
/** @brief Discard jobs from a chosen type, use NOJOBTYPE to discard all jobs for this clip */
|
||||
void discardJobs(const QString &id, AbstractClipJob::JOBTYPE type = AbstractClipJob::NOJOBTYPE);
|
||||
/** @brief Discard jobs from a chosen type, use NOJOBTYPE to discard all jobs for this clip
|
||||
* @returns true if a job was found and discarded
|
||||
*/
|
||||
bool discardJobs(const QString &id, AbstractClipJob::JOBTYPE type = AbstractClipJob::NOJOBTYPE);
|
||||
|
||||
/** @brief Check if there is a job waiting / running for this clip */
|
||||
bool hasPendingJob(const QString &id, AbstractClipJob::JOBTYPE type);
|
||||
|
||||
/** @brief Reload / replace a producer */
|
||||
void reloadProducer(const QString &id, QDomElement xml);
|
||||
void reloadProducer(const QString &id, const QDomElement &xml);
|
||||
|
||||
/** @brief Current producer has changed, refresh monitor and timeline*/
|
||||
void refreshClip(const QString &id);
|
||||
@@ -418,12 +233,11 @@ public:
|
||||
void emitItemAdded(AbstractProjectItem *item);
|
||||
void emitAboutToRemoveItem(AbstractProjectItem *item);
|
||||
void emitItemRemoved(AbstractProjectItem *item);
|
||||
void setupMenu(QMenu *addMenu, QAction *defaultAction, QHash <QString, QAction*> actions);
|
||||
void setupMenu(QMenu *addMenu, QAction *defaultAction, const QHash<QString, QAction *> &actions);
|
||||
|
||||
/** @brief The source file was modified, we will reload it soon, disable item in the meantime */
|
||||
void setWaitingStatus(const QString &id);
|
||||
|
||||
|
||||
const QString getDocumentProperty(const QString &key);
|
||||
|
||||
/** @brief A proxy clip was just created, pass it to the responsible item */
|
||||
@@ -459,7 +273,7 @@ public:
|
||||
void removeClipCut(const QString &id, int in, int out);
|
||||
|
||||
/** @brief Create the subclips defined in the parent clip. */
|
||||
void loadSubClips(const QString&id, const QMap <QString,QString> data);
|
||||
void loadSubClips(const QString &id, const QMap<QString, QString> &data);
|
||||
|
||||
/** @brief Set focus to the Bin view. */
|
||||
void focusBinView() const;
|
||||
@@ -489,7 +303,7 @@ public:
|
||||
/** @brief Add an effect to a bin clip. */
|
||||
void addEffect(const QString &id, QDomElement &effect);
|
||||
/** @brief Update a bin clip effect. */
|
||||
void updateEffect(const QString &id, QDomElement &effect, int ix, bool refreshStackWidget);
|
||||
void updateEffect(const QString &id, QDomElement &effect, int ix, bool refreshStackWidget, bool updateClip);
|
||||
void changeEffectState(const QString &id, const QList<int> &indexes, bool disable, bool refreshStack);
|
||||
/** @brief Edit an effect settings to a bin clip. */
|
||||
void editMasterEffect(ClipController *ctl);
|
||||
@@ -521,7 +335,7 @@ public:
|
||||
QDockWidget *clipPropertiesDock();
|
||||
/** @brief Returns a cached thumbnail. */
|
||||
QImage findCachedPixmap(const QString &path);
|
||||
void cachePixmap(const QString &path, QImage img);
|
||||
void cachePixmap(const QString &path, const QImage &img);
|
||||
/** @brief Returns a document's cache dir. ok is set to false if folder does not exist */
|
||||
QDir getCacheDir(CacheType type, bool *ok) const;
|
||||
/** @brief Command adding a bin clip */
|
||||
@@ -530,9 +344,9 @@ public:
|
||||
/** @brief Return a list of all clips hashes used in this project */
|
||||
QStringList getProxyHashList();
|
||||
/** @brief Get info (id, name) of a folder (or the currently selected one) */
|
||||
const QStringList getFolderInfo(QModelIndex selectedIx = QModelIndex());
|
||||
const QStringList getFolderInfo(const QModelIndex &selectedIx = QModelIndex());
|
||||
/** @brief Save a clip zone as MLT playlist */
|
||||
void saveZone(QStringList info, QDir dir);
|
||||
void saveZone(const QStringList &info, const QDir &dir);
|
||||
|
||||
private slots:
|
||||
void slotAddClip();
|
||||
@@ -544,7 +358,7 @@ private slots:
|
||||
void slotShowDescColumn(bool show);
|
||||
|
||||
/** @brief Setup the bin view type (icon view, tree view, ...).
|
||||
* @param action The action whose data defines the view type or NULL to keep default view */
|
||||
* @param action The action whose data defines the view type or nullptr to keep default view */
|
||||
void slotInitView(QAction *action);
|
||||
|
||||
/** @brief Update status for clip jobs */
|
||||
@@ -555,22 +369,23 @@ private slots:
|
||||
void selectProxyModel(const QModelIndex &id);
|
||||
void autoSelect();
|
||||
void slotSaveHeaders();
|
||||
void slotItemDropped(QStringList ids, const QModelIndex &parent);
|
||||
void slotItemDropped(const QStringList &ids, const QModelIndex &parent);
|
||||
void slotItemDropped(const QList<QUrl> &urls, const QModelIndex &parent);
|
||||
void slotEffectDropped(QString effect, const QModelIndex &parent);
|
||||
void slotUpdateEffect(QString id, QDomElement oldEffect, QDomElement newEffect, int ix);
|
||||
void slotChangeEffectState(QString id, QList<int> indexes, bool disable);
|
||||
void slotItemEdited(QModelIndex,QModelIndex,QVector<int>);
|
||||
void slotAddUrl(QString url, int folderId, QMap <QString, QString> data = QMap <QString, QString>());
|
||||
void slotAddUrl(QString url, QMap <QString, QString> data = QMap <QString, QString>());
|
||||
void slotEffectDropped(const QString &effect, const QModelIndex &parent);
|
||||
void slotUpdateEffect(QString id, QDomElement oldEffect, QDomElement newEffect, int ix, bool refreshStack = false, bool updateClip = true);
|
||||
void slotChangeEffectState(QString id, const QList<int> &indexes, bool disable);
|
||||
void slotItemEdited(const QModelIndex &, const QModelIndex &, const QVector<int> &);
|
||||
void slotAddUrl(const QString &url, int folderId, const QMap<QString, QString> &data = QMap<QString, QString>());
|
||||
void slotAddUrl(const QString &url, const QMap<QString, QString> &data = QMap<QString, QString>());
|
||||
|
||||
void slotPrepareJobsMenu();
|
||||
void slotShowJobLog();
|
||||
/** @brief process clip job result. */
|
||||
void slotGotFilterJobResults(QString ,int , int, stringMap, stringMap);
|
||||
void slotGotFilterJobResults(const QString &, int, int, const stringMap &, const stringMap &);
|
||||
/** @brief Reset all text and log data from info message widget. */
|
||||
void slotResetInfoMessage();
|
||||
/** @brief Show dialog prompting for removal of invalid clips. */
|
||||
void slotQueryRemoval(const QString &id, QUrl url, const QString &errorMessage);
|
||||
void slotQueryRemoval(const QString &id, const QString &url, const QString &errorMessage);
|
||||
/** @brief Request display of current clip in monitor. */
|
||||
void slotOpenCurrent();
|
||||
void slotZoomView(bool zoomIn);
|
||||
@@ -578,12 +393,12 @@ private slots:
|
||||
void slotGotFocus();
|
||||
/** @brief Dis/Enable all bin effects. */
|
||||
void slotDisableEffects(bool disable);
|
||||
/** @brief Rename a Bin Folder. */
|
||||
void slotRenameFolder();
|
||||
/** @brief Rename a Bin Item. */
|
||||
void slotRenameItem();
|
||||
void slotCreateAudioThumbs();
|
||||
void doRefreshPanel(const QString &id);
|
||||
/** @brief Send audio thumb data to monitor for display. */
|
||||
void slotSendAudioThumb(QString id);
|
||||
void slotSendAudioThumb(const QString &id);
|
||||
void doRefreshAudioThumbs(const QString &id);
|
||||
/** @brief Enable item view and hide message */
|
||||
void slotMessageActionTriggered();
|
||||
@@ -600,10 +415,10 @@ public slots:
|
||||
* @param id the clip id
|
||||
* @param controller The Controller for this clip
|
||||
*/
|
||||
void slotProducerReady(requestClipInfo info, ClipController *controller);
|
||||
void slotProducerReady(const requestClipInfo &info, ClipController *controller);
|
||||
void slotRemoveInvalidClip(const QString &id, bool replace, const QString &errorMessage);
|
||||
/** @brief Create a folder when opening a document */
|
||||
void slotLoadFolders(QMap<QString,QString> foldersData);
|
||||
void slotLoadFolders(const QMap<QString, QString> &foldersData);
|
||||
/** @brief Reload clip thumbnail - when frame for thumbnail changed */
|
||||
void slotRefreshClipThumbnail(const QString &id);
|
||||
void slotDeleteClip();
|
||||
@@ -617,7 +432,7 @@ public slots:
|
||||
void slotStartCutJob(const QString &id);
|
||||
/** @brief Triggered by a clip job action, start the job */
|
||||
void slotStartClipJob(bool enable);
|
||||
void slotEditClipCommand(const QString &id, QMap<QString, QString>oldProps, QMap<QString, QString>newProps);
|
||||
void slotEditClipCommand(const QString &id, const QMap<QString, QString> &oldProps, const QMap<QString, QString> &newProps);
|
||||
void slotCancelRunningJob(const QString &id, const QMap<QString, QString> &newProps);
|
||||
/** @brief Start a filter job requested by a filter applied in timeline */
|
||||
void slotStartFilterJob(const ItemInfo &info, const QString &id, QMap<QString, QString> &filterParams, QMap<QString, QString> &consumerParams, QMap<QString, QString> &extraParams);
|
||||
@@ -625,42 +440,45 @@ public slots:
|
||||
void slotAddClipCut(const QString &id, int in, int out);
|
||||
/** @brief Open current clip in an external editing application */
|
||||
void slotOpenClip();
|
||||
void slotAddClipMarker(const QString &id, QList <CommentedTime> newMarker, QUndoCommand *groupCommand = 0);
|
||||
void slotAddClipMarker(const QString &id, const QList<CommentedTime> &newMarker, QUndoCommand *groupCommand = nullptr);
|
||||
void slotLoadClipMarkers(const QString &id);
|
||||
void slotSaveClipMarkers(const QString &id);
|
||||
void slotDuplicateClip();
|
||||
void slotLocateClip();
|
||||
void slotDeleteEffect(const QString &id, QDomElement effect);
|
||||
void slotMoveEffect(const QString &id, QList <int> currentPos, int newPos);
|
||||
void slotMoveEffect(const QString &id, const QList<int> ¤tPos, int newPos);
|
||||
/** @brief Request audio thumbnail for clip with id */
|
||||
void slotCreateAudioThumb(const QString &id);
|
||||
/** @brief Abort audio thumbnail for clip with id */
|
||||
void slotAbortAudioThumb(const QString &id, long duration);
|
||||
/** @brief Add extra data to a clip. */
|
||||
void slotAddClipExtraData(const QString &id, const QString &key, const QString &data = QString(), QUndoCommand *groupCommand = 0);
|
||||
void slotUpdateClipProperties(const QString &id, QMap <QString, QString> properties, bool refreshPropertiesPanel);
|
||||
void slotAddClipExtraData(const QString &id, const QString &key, const QString &data = QString(), QUndoCommand *groupCommand = nullptr);
|
||||
void slotUpdateClipProperties(const QString &id, const QMap<QString, QString> &properties, bool refreshPropertiesPanel);
|
||||
/** @brief Pass some important properties to timeline track producers. */
|
||||
void updateTimelineProducers(const QString &id, QMap <QString, QString> passProperties);
|
||||
void updateTimelineProducers(const QString &id, const QMap<QString, QString> &passProperties);
|
||||
/** @brief Add effect to active Bin clip (used when double clicking an effect in list). */
|
||||
void slotEffectDropped(QString id, QDomElement);
|
||||
/** @brief Request current frame from project monitor. */
|
||||
void slotGetCurrentProjectImage(bool request);
|
||||
void slotExpandUrl(ItemInfo info, QUrl url, QUndoCommand *command);
|
||||
/** @brief Request current frame from project monitor.
|
||||
* @param clipId is the id of a clip we want to hide from screenshot
|
||||
* @param request true to start capture process, false to end it. It is necessary to emit a false after image is received
|
||||
**/
|
||||
void slotGetCurrentProjectImage(const QString &clipId, bool request);
|
||||
void slotExpandUrl(const ItemInfo &info, const QString &url, QUndoCommand *command);
|
||||
void abortAudioThumbs();
|
||||
/** @brief Abort all ongoing operations to prepare close. */
|
||||
void abortOperations();
|
||||
void doDisplayMessage(const QString &text, KMessageWidget::MessageType type, QList <QAction*> actions = QList <QAction*>());
|
||||
void doDisplayMessage(const QString &text, KMessageWidget::MessageType type, const QList<QAction *> &actions = QList<QAction *>());
|
||||
/** @brief Reset all clip usage to 0 */
|
||||
void resetUsageCount();
|
||||
/** @brief Select a clip in the Bin from its id. */
|
||||
void selectClipById(const QString &id, int frame = -1, const QPoint &zone = QPoint());
|
||||
void slotAddClipToProject(QUrl url);
|
||||
void slotAddClipToProject(const QUrl &url);
|
||||
void doUpdateThumbsProgress(long ms);
|
||||
void droppedUrls(QList <QUrl> urls, const QStringList &folderInfo = QStringList());
|
||||
void droppedUrls(const QList<QUrl> &urls, const QStringList &folderInfo = QStringList());
|
||||
|
||||
protected:
|
||||
void contextMenuEvent(QContextMenuEvent *event);
|
||||
bool eventFilter(QObject *obj, QEvent *event);
|
||||
void contextMenuEvent(QContextMenuEvent *event) Q_DECL_OVERRIDE;
|
||||
bool eventFilter(QObject *obj, QEvent *event) Q_DECL_OVERRIDE;
|
||||
|
||||
private:
|
||||
ProjectItemModel *m_itemModel;
|
||||
@@ -705,7 +523,7 @@ private:
|
||||
QAction *m_locateAction;
|
||||
QAction *m_proxyAction;
|
||||
QAction *m_deleteAction;
|
||||
QAction *m_renameFolderAction;
|
||||
QAction *m_renameAction;
|
||||
QMenu *m_jobsMenu;
|
||||
QAction *m_cancelJobs;
|
||||
QAction *m_discardCurrentClipJobs;
|
||||
@@ -741,8 +559,8 @@ signals:
|
||||
void itemUpdated(AbstractProjectItem *);
|
||||
void producerReady(const QString &id);
|
||||
/** @brief Save folder info into MLT. */
|
||||
void storeFolder(QString folderId, QString parentId, QString oldParentId, QString folderName);
|
||||
void gotFilterJobResults(QString,int,int,stringMap,stringMap);
|
||||
void storeFolder(const QString &folderId, const QString &parentId, const QString &oldParentId, const QString &folderName);
|
||||
void gotFilterJobResults(const QString &, int, int, stringMap, stringMap);
|
||||
/** @brief The clip was changed and thumbnail needs a refresh. */
|
||||
void clipNeedsReload(const QString &, bool);
|
||||
/** @brief Trigger timecode format refresh where needed. */
|
||||
@@ -753,13 +571,13 @@ signals:
|
||||
void masterClipUpdated(ClipController *, Monitor *);
|
||||
void displayBinMessage(const QString &, KMessageWidget::MessageType);
|
||||
void displayMessage(const QString &, int, MessageType);
|
||||
void requesteInvalidRemoval(const QString &, QUrl, const QString &);
|
||||
void requesteInvalidRemoval(const QString &, const QString &, const QString &);
|
||||
/** @brief Markers changed, refresh panel. */
|
||||
void refreshPanelMarkers();
|
||||
/** @brief Analysis data changed, refresh panel. */
|
||||
void updateAnalysisData(const QString &);
|
||||
void openClip(ClipController *c, int in = -1, int out = -1);
|
||||
/** @brief Fill context menu with occurences of this clip in timeline. */
|
||||
/** @brief Fill context menu with occurrences of this clip in timeline. */
|
||||
void findInTimeline(const QString &);
|
||||
void clipNameChanged(const QString &);
|
||||
/** @brief A clip was updated, request panel update. */
|
||||
|
||||
@@ -31,26 +31,30 @@ AddBinFolderCommand::AddBinFolderCommand(Bin *bin, const QString &id, const QStr
|
||||
m_parentId(parentId),
|
||||
m_remove(remove)
|
||||
{
|
||||
if (remove) setText(i18n("Remove Folder"));
|
||||
else setText(i18n("Add Folder"));
|
||||
if (remove) {
|
||||
setText(i18n("Remove Folder"));
|
||||
} else {
|
||||
setText(i18n("Add Folder"));
|
||||
}
|
||||
}
|
||||
// virtual
|
||||
void AddBinFolderCommand::undo()
|
||||
{
|
||||
if (m_remove)
|
||||
if (m_remove) {
|
||||
m_bin->doAddFolder(m_id, m_name, m_parentId);
|
||||
else
|
||||
} else {
|
||||
m_bin->doRemoveFolder(m_id);
|
||||
}
|
||||
}
|
||||
// virtual
|
||||
void AddBinFolderCommand::redo()
|
||||
{
|
||||
if (m_remove)
|
||||
if (m_remove) {
|
||||
m_bin->doRemoveFolder(m_id);
|
||||
else
|
||||
} else {
|
||||
m_bin->doAddFolder(m_id, m_name, m_parentId);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
MoveBinClipCommand::MoveBinClipCommand(Bin *bin, const QString &clipId, const QString &oldParentId, const QString &newParentId, QUndoCommand *parent) :
|
||||
QUndoCommand(parent),
|
||||
@@ -150,26 +154,27 @@ void RemoveBinEffectCommand::redo()
|
||||
m_bin->removeEffect(m_clipId, m_effect);
|
||||
}
|
||||
|
||||
UpdateBinEffectCommand::UpdateBinEffectCommand(Bin *bin, const QString &clipId, QDomElement &oldEffect, QDomElement &newEffect, int ix, QUndoCommand *parent) :
|
||||
UpdateBinEffectCommand::UpdateBinEffectCommand(Bin *bin, const QString &clipId, QDomElement &oldEffect, QDomElement &newEffect, int ix, bool refreshStack, bool updateClip, QUndoCommand *parent) :
|
||||
QUndoCommand(parent),
|
||||
m_bin(bin),
|
||||
m_clipId(clipId),
|
||||
m_oldEffect(oldEffect),
|
||||
m_newEffect(newEffect),
|
||||
m_ix(ix),
|
||||
m_refreshStack(false)
|
||||
m_refreshStack(refreshStack),
|
||||
m_updateClip(updateClip)
|
||||
{
|
||||
setText(i18n("Edit Bin Effect"));
|
||||
}
|
||||
// virtual
|
||||
void UpdateBinEffectCommand::undo()
|
||||
{
|
||||
m_bin->updateEffect(m_clipId, m_oldEffect, m_ix, m_refreshStack);
|
||||
m_bin->updateEffect(m_clipId, m_oldEffect, m_ix, m_refreshStack, m_updateClip);
|
||||
}
|
||||
// virtual
|
||||
void UpdateBinEffectCommand::redo()
|
||||
{
|
||||
m_bin->updateEffect(m_clipId, m_newEffect, m_ix, m_refreshStack);
|
||||
m_bin->updateEffect(m_clipId, m_newEffect, m_ix, m_refreshStack, m_updateClip);
|
||||
m_refreshStack = true;
|
||||
}
|
||||
|
||||
@@ -181,11 +186,12 @@ ChangeMasterEffectStateCommand::ChangeMasterEffectStateCommand(Bin *bin, const Q
|
||||
m_disable(disable),
|
||||
m_refreshEffectStack(false)
|
||||
{
|
||||
if (disable)
|
||||
if (disable) {
|
||||
setText(i18np("Disable effect", "Disable effects", effectIndexes.count()));
|
||||
else
|
||||
} else {
|
||||
setText(i18np("Enable effect", "Enable effects", effectIndexes.count()));
|
||||
}
|
||||
}
|
||||
|
||||
// virtual
|
||||
void ChangeMasterEffectStateCommand::undo()
|
||||
@@ -199,12 +205,13 @@ void ChangeMasterEffectStateCommand::redo()
|
||||
m_refreshEffectStack = true;
|
||||
}
|
||||
|
||||
MoveBinEffectCommand::MoveBinEffectCommand(Bin *bin, const QString &clipId, QList <int> oldPos, int newPos, QUndoCommand *parent) :
|
||||
MoveBinEffectCommand::MoveBinEffectCommand(Bin *bin, const QString &clipId, const QList<int> &oldPos, int newPos, QUndoCommand *parent) :
|
||||
QUndoCommand(parent),
|
||||
m_bin(bin),
|
||||
m_clipId(clipId),
|
||||
m_oldindex(oldPos)
|
||||
{
|
||||
m_newindex.reserve(m_oldindex.count());
|
||||
for (int i = 0; i < m_oldindex.count(); ++i) {
|
||||
m_newindex << newPos + i;
|
||||
}
|
||||
@@ -244,7 +251,6 @@ void RenameBinSubClipCommand::redo()
|
||||
m_bin->renameSubClip(m_clipId, m_newName, m_oldName, m_in, m_out);
|
||||
}
|
||||
|
||||
|
||||
AddBinClipCutCommand::AddBinClipCutCommand(Bin *bin, const QString &clipId, int in, int out, bool add, QUndoCommand *parent) :
|
||||
QUndoCommand(parent)
|
||||
, m_bin(bin)
|
||||
@@ -261,8 +267,7 @@ void AddBinClipCutCommand::undo()
|
||||
{
|
||||
if (m_addCut) {
|
||||
m_bin->removeClipCut(m_clipId, m_in, m_out);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
m_bin->addClipCut(m_clipId, m_in, m_out);
|
||||
}
|
||||
}
|
||||
@@ -271,8 +276,7 @@ void AddBinClipCutCommand::redo()
|
||||
{
|
||||
if (m_addCut) {
|
||||
m_bin->addClipCut(m_clipId, m_in, m_out);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
m_bin->removeClipCut(m_clipId, m_in, m_out);
|
||||
}
|
||||
}
|
||||
@@ -296,8 +300,9 @@ void EditClipCommand::undo()
|
||||
// virtual
|
||||
void EditClipCommand::redo()
|
||||
{
|
||||
if (m_doIt)
|
||||
if (m_doIt) {
|
||||
m_bin->slotUpdateClipProperties(m_id, m_newparams, !m_firstExec);
|
||||
}
|
||||
m_doIt = true;
|
||||
m_firstExec = false;
|
||||
}
|
||||
@@ -309,22 +314,27 @@ AddClipCommand::AddClipCommand(Bin *bin, const QDomElement &xml, const QString &
|
||||
m_id(id),
|
||||
m_doIt(doIt)
|
||||
{
|
||||
if (doIt) setText(i18n("Add clip"));
|
||||
else setText(i18n("Delete clip"));
|
||||
if (doIt) {
|
||||
setText(i18n("Add clip"));
|
||||
} else {
|
||||
setText(i18n("Delete clip"));
|
||||
}
|
||||
}
|
||||
// virtual
|
||||
void AddClipCommand::undo()
|
||||
{
|
||||
if (m_doIt)
|
||||
if (m_doIt) {
|
||||
m_bin->deleteClip(m_id);
|
||||
else
|
||||
} else {
|
||||
m_bin->addClip(m_xml, m_id);
|
||||
}
|
||||
}
|
||||
// virtual
|
||||
void AddClipCommand::redo()
|
||||
{
|
||||
if (m_doIt)
|
||||
if (m_doIt) {
|
||||
m_bin->addClip(m_xml, m_id);
|
||||
else
|
||||
} else {
|
||||
m_bin->deleteClip(m_id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#ifndef BINCOMMANDS_H
|
||||
#define BINCOMMANDS_H
|
||||
|
||||
@@ -27,13 +26,12 @@
|
||||
|
||||
class Bin;
|
||||
|
||||
|
||||
class AddBinFolderCommand : public QUndoCommand
|
||||
{
|
||||
public:
|
||||
explicit AddBinFolderCommand(Bin *bin, const QString &id, const QString &name, const QString &parentId, bool remove = false, QUndoCommand * parent = 0);
|
||||
void undo();
|
||||
void redo();
|
||||
explicit AddBinFolderCommand(Bin *bin, const QString &id, const QString &name, const QString &parentId, bool remove = false, QUndoCommand *parent = nullptr);
|
||||
void undo() Q_DECL_OVERRIDE;
|
||||
void redo() Q_DECL_OVERRIDE;
|
||||
private:
|
||||
Bin *m_bin;
|
||||
QString m_id;
|
||||
@@ -42,13 +40,12 @@ private:
|
||||
bool m_remove;
|
||||
};
|
||||
|
||||
|
||||
class MoveBinClipCommand : public QUndoCommand
|
||||
{
|
||||
public:
|
||||
explicit MoveBinClipCommand(Bin *bin, const QString &clipId, const QString &oldParentId, const QString &newParentId, QUndoCommand *parent = 0);
|
||||
void undo();
|
||||
void redo();
|
||||
explicit MoveBinClipCommand(Bin *bin, const QString &clipId, const QString &oldParentId, const QString &newParentId, QUndoCommand *parent = nullptr);
|
||||
void undo() Q_DECL_OVERRIDE;
|
||||
void redo() Q_DECL_OVERRIDE;
|
||||
private:
|
||||
Bin *m_bin;
|
||||
QString m_clipId;
|
||||
@@ -59,9 +56,9 @@ private:
|
||||
class MoveBinFolderCommand : public QUndoCommand
|
||||
{
|
||||
public:
|
||||
explicit MoveBinFolderCommand(Bin *bin, const QString &clipId, const QString &oldParentId, const QString &newParentId, QUndoCommand *parent = 0);
|
||||
void undo();
|
||||
void redo();
|
||||
explicit MoveBinFolderCommand(Bin *bin, const QString &clipId, const QString &oldParentId, const QString &newParentId, QUndoCommand *parent = nullptr);
|
||||
void undo() Q_DECL_OVERRIDE;
|
||||
void redo() Q_DECL_OVERRIDE;
|
||||
private:
|
||||
Bin *m_bin;
|
||||
QString m_clipId;
|
||||
@@ -72,9 +69,9 @@ private:
|
||||
class RenameBinFolderCommand : public QUndoCommand
|
||||
{
|
||||
public:
|
||||
explicit RenameBinFolderCommand(Bin *bin, const QString &folderId, const QString &newName, const QString &oldName, QUndoCommand *parent = 0);
|
||||
void undo();
|
||||
void redo();
|
||||
explicit RenameBinFolderCommand(Bin *bin, const QString &folderId, const QString &newName, const QString &oldName, QUndoCommand *parent = nullptr);
|
||||
void undo() Q_DECL_OVERRIDE;
|
||||
void redo() Q_DECL_OVERRIDE;
|
||||
private:
|
||||
Bin *m_bin;
|
||||
QString m_clipId;
|
||||
@@ -85,9 +82,9 @@ private:
|
||||
class AddBinEffectCommand : public QUndoCommand
|
||||
{
|
||||
public:
|
||||
explicit AddBinEffectCommand(Bin *bin, const QString &clipId, QDomElement &effect, QUndoCommand *parent = 0);
|
||||
void undo();
|
||||
void redo();
|
||||
explicit AddBinEffectCommand(Bin *bin, const QString &clipId, QDomElement &effect, QUndoCommand *parent = nullptr);
|
||||
void undo() Q_DECL_OVERRIDE;
|
||||
void redo() Q_DECL_OVERRIDE;
|
||||
private:
|
||||
Bin *m_bin;
|
||||
QString m_clipId;
|
||||
@@ -97,9 +94,9 @@ private:
|
||||
class RemoveBinEffectCommand : public QUndoCommand
|
||||
{
|
||||
public:
|
||||
explicit RemoveBinEffectCommand(Bin *bin, const QString &clipId, QDomElement &effect, QUndoCommand *parent = 0);
|
||||
void undo();
|
||||
void redo();
|
||||
explicit RemoveBinEffectCommand(Bin *bin, const QString &clipId, QDomElement &effect, QUndoCommand *parent = nullptr);
|
||||
void undo() Q_DECL_OVERRIDE;
|
||||
void redo() Q_DECL_OVERRIDE;
|
||||
private:
|
||||
Bin *m_bin;
|
||||
QString m_clipId;
|
||||
@@ -109,9 +106,9 @@ private:
|
||||
class UpdateBinEffectCommand : public QUndoCommand
|
||||
{
|
||||
public:
|
||||
explicit UpdateBinEffectCommand(Bin *bin, const QString &clipId, QDomElement &oldEffect, QDomElement &newEffect, int ix, QUndoCommand *parent = 0);
|
||||
void undo();
|
||||
void redo();
|
||||
explicit UpdateBinEffectCommand(Bin *bin, const QString &clipId, QDomElement &oldEffect, QDomElement &newEffect, int ix, bool refreshStack, bool updateClip, QUndoCommand *parent = nullptr);
|
||||
void undo() Q_DECL_OVERRIDE;
|
||||
void redo() Q_DECL_OVERRIDE;
|
||||
private:
|
||||
Bin *m_bin;
|
||||
QString m_clipId;
|
||||
@@ -119,14 +116,15 @@ private:
|
||||
QDomElement m_newEffect;
|
||||
int m_ix;
|
||||
bool m_refreshStack;
|
||||
bool m_updateClip;
|
||||
};
|
||||
|
||||
class ChangeMasterEffectStateCommand : public QUndoCommand
|
||||
{
|
||||
public:
|
||||
ChangeMasterEffectStateCommand(Bin *bin, const QString &clipId, const QList <int>& effectIndexes, bool disable, QUndoCommand *parent = 0);
|
||||
void undo();
|
||||
void redo();
|
||||
ChangeMasterEffectStateCommand(Bin *bin, const QString &clipId, const QList<int> &effectIndexes, bool disable, QUndoCommand *parent = nullptr);
|
||||
void undo() Q_DECL_OVERRIDE;
|
||||
void redo() Q_DECL_OVERRIDE;
|
||||
private:
|
||||
Bin *m_bin;
|
||||
QString m_clipId;
|
||||
@@ -138,9 +136,9 @@ private:
|
||||
class MoveBinEffectCommand : public QUndoCommand
|
||||
{
|
||||
public:
|
||||
explicit MoveBinEffectCommand(Bin *bin, const QString &clipId, QList <int> oldPos, int newPos, QUndoCommand *parent = 0);
|
||||
void undo();
|
||||
void redo();
|
||||
explicit MoveBinEffectCommand(Bin *bin, const QString &clipId, const QList<int> &oldPos, int newPos, QUndoCommand *parent = nullptr);
|
||||
void undo() Q_DECL_OVERRIDE;
|
||||
void redo() Q_DECL_OVERRIDE;
|
||||
private:
|
||||
Bin *m_bin;
|
||||
QString m_clipId;
|
||||
@@ -151,9 +149,9 @@ private:
|
||||
class RenameBinSubClipCommand : public QUndoCommand
|
||||
{
|
||||
public:
|
||||
explicit RenameBinSubClipCommand(Bin *bin, const QString &clipId, const QString &newName, const QString &oldName, int in, int out, QUndoCommand *parent = 0);
|
||||
void undo();
|
||||
void redo();
|
||||
explicit RenameBinSubClipCommand(Bin *bin, const QString &clipId, const QString &newName, const QString &oldName, int in, int out, QUndoCommand *parent = nullptr);
|
||||
void undo() Q_DECL_OVERRIDE;
|
||||
void redo() Q_DECL_OVERRIDE;
|
||||
private:
|
||||
Bin *m_bin;
|
||||
QString m_clipId;
|
||||
@@ -166,9 +164,9 @@ private:
|
||||
class AddBinClipCutCommand : public QUndoCommand
|
||||
{
|
||||
public:
|
||||
explicit AddBinClipCutCommand(Bin *bin, const QString &clipId, int in, int out, bool add, QUndoCommand *parent = 0);
|
||||
void undo();
|
||||
void redo();
|
||||
explicit AddBinClipCutCommand(Bin *bin, const QString &clipId, int in, int out, bool add, QUndoCommand *parent = nullptr);
|
||||
void undo() Q_DECL_OVERRIDE;
|
||||
void redo() Q_DECL_OVERRIDE;
|
||||
private:
|
||||
Bin *m_bin;
|
||||
QString m_clipId;
|
||||
@@ -180,9 +178,9 @@ private:
|
||||
class EditClipCommand : public QUndoCommand
|
||||
{
|
||||
public:
|
||||
EditClipCommand(Bin *bin, const QString &id, const QMap <QString, QString> &oldparams, const QMap <QString, QString> &newparams, bool doIt, QUndoCommand * parent = 0);
|
||||
void undo();
|
||||
void redo();
|
||||
EditClipCommand(Bin *bin, const QString &id, const QMap<QString, QString> &oldparams, const QMap<QString, QString> &newparams, bool doIt, QUndoCommand *parent = nullptr);
|
||||
void undo() Q_DECL_OVERRIDE;
|
||||
void redo() Q_DECL_OVERRIDE;
|
||||
private:
|
||||
Bin *m_bin;
|
||||
QMap<QString, QString> m_oldparams;
|
||||
@@ -199,9 +197,9 @@ private:
|
||||
class AddClipCommand : public QUndoCommand
|
||||
{
|
||||
public:
|
||||
AddClipCommand(Bin *bin, const QDomElement &xml, const QString &id, bool doIt, QUndoCommand * parent = 0);
|
||||
void undo();
|
||||
void redo();
|
||||
AddClipCommand(Bin *bin, const QDomElement &xml, const QString &id, bool doIt, QUndoCommand *parent = nullptr);
|
||||
void undo() Q_DECL_OVERRIDE;
|
||||
void redo() Q_DECL_OVERRIDE;
|
||||
private:
|
||||
Bin *m_bin;
|
||||
QDomElement m_xml;
|
||||
@@ -209,6 +207,5 @@ private:
|
||||
bool m_doIt;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||