Compare commits
896 Commits
v20.04.0
...
work/qtweb
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
173ce96285 | ||
|
|
ddae45aebb | ||
|
|
94303d6531 | ||
|
|
136ad56966 | ||
|
|
15045192d5 | ||
|
|
31a9b0424e | ||
|
|
a1fd4d7330 | ||
|
|
9de5447253 | ||
|
|
daf3ee8c4a | ||
|
|
bc69822889 | ||
|
|
f6c87416c4 | ||
|
|
d84dacb54f | ||
|
|
735bf84b17 | ||
|
|
8f43cbb7c7 | ||
|
|
5dae30174d | ||
|
|
93a40647ad | ||
|
|
0748c3c4a3 | ||
|
|
0e57fe1e8f | ||
|
|
c92da2590d | ||
|
|
970df3918a | ||
|
|
708592573f | ||
|
|
791e2d060b | ||
|
|
3af486f289 | ||
|
|
d8f08ed37c | ||
|
|
20311cb59d | ||
|
|
65cba8aa09 | ||
|
|
2f9edda61c | ||
|
|
f8cd54b2e4 | ||
|
|
9c9c327bdb | ||
|
|
a12ba6dfa4 | ||
|
|
9b615fca5e | ||
|
|
453cf95a62 | ||
|
|
978b4225ae | ||
|
|
9e077005c7 | ||
|
|
c18bf45a70 | ||
|
|
76b9492d05 | ||
|
|
356cb41704 | ||
|
|
b65689cb15 | ||
|
|
8e3163b260 | ||
|
|
ed5e0ed3dc | ||
|
|
3986e1b48e | ||
|
|
aaa02ac8d0 | ||
|
|
b748efa0e4 | ||
|
|
7b1d44c411 | ||
|
|
71c7f6c11f | ||
|
|
a7c7e98db0 | ||
|
|
d143ef0a11 | ||
|
|
97503c9b4f | ||
|
|
9da3b3d18d | ||
|
|
5bfa3af4db | ||
|
|
273c0b34bf | ||
|
|
a1909bd3f6 | ||
|
|
1463649578 | ||
|
|
695c6b3bff | ||
|
|
ec97c5646b | ||
|
|
33758be44b | ||
|
|
d9c7dcb55f | ||
|
|
5cc52f5126 | ||
|
|
d8c42f4aec | ||
|
|
ab00a0414e | ||
|
|
c8b8909a5a | ||
|
|
4a3a55e83b | ||
|
|
0547233f23 | ||
|
|
eeada05539 | ||
|
|
70223d6626 | ||
|
|
76d87f66b2 | ||
|
|
68e2dcfb7e | ||
|
|
9c9672d541 | ||
|
|
18d09e2f26 | ||
|
|
b4895a069e | ||
|
|
3b9595bd99 | ||
|
|
b7ab436a3c | ||
|
|
7cf1ac94dc | ||
|
|
4403ee204e | ||
|
|
c9fda75cfc | ||
|
|
f4f92defbe | ||
|
|
a10b527701 | ||
|
|
f11aae7d69 | ||
|
|
fa18eb5fc1 | ||
|
|
b5c0883123 | ||
|
|
9ee0157aeb | ||
|
|
513534e28b | ||
|
|
47982916a7 | ||
|
|
946c9e912f | ||
|
|
5ce4e575f6 | ||
|
|
c75ac2a8d2 | ||
|
|
03743f32d7 | ||
|
|
7b17322c07 | ||
|
|
c396a58e44 | ||
|
|
95585239b6 | ||
|
|
a8279d49c1 | ||
|
|
e50ed4e1e4 | ||
|
|
fc586019f4 | ||
|
|
e2dd30d50e | ||
|
|
4e7f7498d5 | ||
|
|
ec6bd612b3 | ||
|
|
8ccda514d6 | ||
|
|
4f51bc3e2b | ||
|
|
a155503246 | ||
|
|
7df43a547f | ||
|
|
ac7fc97372 | ||
|
|
2ab1fcb014 | ||
|
|
6ec0e30868 | ||
|
|
86266b4ae2 | ||
|
|
6412954786 | ||
|
|
4e0e85dbf9 | ||
|
|
097b3ad60f | ||
|
|
bb3b42654b | ||
|
|
508a4b7760 | ||
|
|
4d93def3c5 | ||
|
|
d10c66c5db | ||
|
|
c7dc53a88d | ||
|
|
e23e35034c | ||
|
|
45c4e5e6a8 | ||
|
|
f8af6b85f1 | ||
|
|
1156c6d74a | ||
|
|
0f2968db9b | ||
|
|
25e5eb2998 | ||
|
|
a6937dc349 | ||
|
|
25ba5eaa1b | ||
|
|
568cf02fcb | ||
|
|
e053e1d0b8 | ||
|
|
ab2691e8f6 | ||
|
|
ef83deec31 | ||
|
|
eadb5bb1fe | ||
|
|
eab02f5fda | ||
|
|
6b93a37431 | ||
|
|
5034c4fed4 | ||
|
|
8f521325d0 | ||
|
|
838bf7a622 | ||
|
|
6623b5cfe9 | ||
|
|
1b9e07254a | ||
|
|
3770fe8063 | ||
|
|
c529d3edf6 | ||
|
|
5b84846013 | ||
|
|
3d8eac623d | ||
|
|
12ba744532 | ||
|
|
8064b54b29 | ||
|
|
41e8726071 | ||
|
|
9a94ca4e7d | ||
|
|
0df40f210d | ||
|
|
2bc6ae1bea | ||
|
|
88980a0641 | ||
|
|
1bddf7ca59 | ||
|
|
d9dc98a9f5 | ||
|
|
a6ea3608f3 | ||
|
|
42d2c4320d | ||
|
|
9c40769bc9 | ||
|
|
bdd32223f2 | ||
|
|
a81e510b72 | ||
|
|
042ce94bf7 | ||
|
|
ba76788bf7 | ||
|
|
af0bd4f7e1 | ||
|
|
58fd31a5e2 | ||
|
|
18fae08380 | ||
|
|
5d6e7e810d | ||
|
|
45fbb03cb4 | ||
|
|
51275f6cff | ||
|
|
ae7a2b56ba | ||
|
|
be57dcdab4 | ||
|
|
37ddf5edb4 | ||
|
|
640664e2a2 | ||
|
|
13120af540 | ||
|
|
1432dd62d1 | ||
|
|
dbd4ae024f | ||
|
|
378c4c72fe | ||
|
|
145d2f16fa | ||
|
|
b1df9fd348 | ||
|
|
73503106e4 | ||
|
|
12467f19d9 | ||
|
|
565a6c1cbd | ||
|
|
a3fe8a8eaa | ||
|
|
704c16118f | ||
|
|
5b74aaba90 | ||
|
|
dff5f70938 | ||
|
|
def6f3f9f7 | ||
|
|
663fcc92e5 | ||
|
|
02e8c3edc4 | ||
|
|
f2bf7f16af | ||
|
|
4d5b1a353c | ||
|
|
0430805f0a | ||
|
|
a362d20705 | ||
|
|
1d5899fb39 | ||
|
|
d7c68402f1 | ||
|
|
0f144df5e3 | ||
|
|
c69bc854ec | ||
|
|
827c2a6e62 | ||
|
|
5c0f642aa8 | ||
|
|
4f81b7514a | ||
|
|
7f3f3365f5 | ||
|
|
0aa315c21e | ||
|
|
62c5aa6b0e | ||
|
|
1f1251bd7f | ||
|
|
083bfd2803 | ||
|
|
9203c8ca9a | ||
|
|
7e8a90aea0 | ||
|
|
40085a0463 | ||
|
|
988439dbcd | ||
|
|
8a08988797 | ||
|
|
9705c94332 | ||
|
|
99db241c7f | ||
|
|
c3155b94e7 | ||
|
|
a976d33fc9 | ||
|
|
153688e196 | ||
|
|
a3bc1439ab | ||
|
|
0378f6d146 | ||
|
|
1e3707f129 | ||
|
|
f049619c47 | ||
|
|
8991e0ee1b | ||
|
|
38a21d0e3f | ||
|
|
bc9de7c403 | ||
|
|
3c0a8db4ac | ||
|
|
baa3c0de78 | ||
|
|
f371478aeb | ||
|
|
fc5f133ac4 | ||
|
|
ee8fb1c29c | ||
|
|
e98818026b | ||
|
|
ac0d843950 | ||
|
|
0ca2d507bf | ||
|
|
5f37ff2e9c | ||
|
|
3716ef32b9 | ||
|
|
5d1a81b627 | ||
|
|
47fcbb2a96 | ||
|
|
d06ec3cd0f | ||
|
|
2ea5bdcde3 | ||
|
|
c008bf1a74 | ||
|
|
2faff23e99 | ||
|
|
7620569d47 | ||
|
|
f33a8cb451 | ||
|
|
e8510ee16e | ||
|
|
df125d294b | ||
|
|
665bfe92e5 | ||
|
|
0bec5caedb | ||
|
|
23ff749fd1 | ||
|
|
b07c788901 | ||
|
|
56d54a5c70 | ||
|
|
5e00c87cec | ||
|
|
4912477068 | ||
|
|
a76b042226 | ||
|
|
6cd8e3d35a | ||
|
|
40afc62f90 | ||
|
|
1413dc409f | ||
|
|
4ec4cedbe2 | ||
|
|
571f59e1ec | ||
|
|
406c56ccbd | ||
|
|
24f6b42d31 | ||
|
|
305a67853f | ||
|
|
2dac8e6440 | ||
|
|
4de7f1e455 | ||
|
|
6660206349 | ||
|
|
e29668a248 | ||
|
|
1c923e8862 | ||
|
|
e8280af748 | ||
|
|
75e57704e0 | ||
|
|
45cbc45593 | ||
|
|
e7e73f9dfe | ||
|
|
813d6ae6cb | ||
|
|
a610f581cc | ||
|
|
865042c81d | ||
|
|
74aa66e249 | ||
|
|
a508e86cfe | ||
|
|
575a0f4882 | ||
|
|
c4966aac90 | ||
|
|
9b08d73ee6 | ||
|
|
8f8f79363a | ||
|
|
d43328bfad | ||
|
|
aba9b0771d | ||
|
|
5b4a2b8006 | ||
|
|
5eb539aad6 | ||
|
|
055abf4d93 | ||
|
|
89d6efe48b | ||
|
|
03cf97450d | ||
|
|
761393e4ee | ||
|
|
604b850745 | ||
|
|
ba564eda44 | ||
|
|
f8654e66ce | ||
|
|
6289435ad6 | ||
|
|
0edce07385 | ||
|
|
e83f8dc0ca | ||
|
|
e80ba1811a | ||
|
|
1e00ab87b4 | ||
|
|
2d61ef598a | ||
|
|
4d13c79f95 | ||
|
|
2526f7af48 | ||
|
|
3b7dc65e5b | ||
|
|
9de3b4dc71 | ||
|
|
fc6c822ff0 | ||
|
|
48b183a2ff | ||
|
|
16e0cc2934 | ||
|
|
b6f8400db9 | ||
|
|
dd5fcbf66b | ||
|
|
7466caef97 | ||
|
|
d9fc8628cc | ||
|
|
e27d3f481e | ||
|
|
e9baf89529 | ||
|
|
35acc60960 | ||
|
|
f7137493d5 | ||
|
|
c533d8a02f | ||
|
|
44ce7aeadc | ||
|
|
7c8de1f60d | ||
|
|
7d0b60c931 | ||
|
|
186c2793f5 | ||
|
|
e0be8f3a08 | ||
|
|
6f46e728c1 | ||
|
|
9a053d651a | ||
|
|
ac93f244ea | ||
|
|
bbbbb509c1 | ||
|
|
5aa1aea64e | ||
|
|
e17e4f2196 | ||
|
|
143bf1697e | ||
|
|
997a9abd3f | ||
|
|
68914726d9 | ||
|
|
66fdf2e060 | ||
|
|
f4a1cdf603 | ||
|
|
9ba6eaa954 | ||
|
|
a0db1142d3 | ||
|
|
3d5c3cebd3 | ||
|
|
587461abe6 | ||
|
|
6eac05ad0d | ||
|
|
64eb4da1ad | ||
|
|
b205949e01 | ||
|
|
a131b627fe | ||
|
|
9c44105456 | ||
|
|
63ca93a43f | ||
|
|
8f29a8fced | ||
|
|
91176f622d | ||
|
|
5d9f20c1b7 | ||
|
|
39cb71cc0a | ||
|
|
1b4d376f88 | ||
|
|
7d81a4b9a9 | ||
|
|
60fdc1e996 | ||
|
|
b2c030c3c0 | ||
|
|
be4d311a04 | ||
|
|
caa2910969 | ||
|
|
0481d8640c | ||
|
|
8b2caa64cd | ||
|
|
8a30937f0a | ||
|
|
8705e0f190 | ||
|
|
ecaefd93bb | ||
|
|
0db4fc0389 | ||
|
|
dbb3b68e7b | ||
|
|
fcc9957062 | ||
|
|
aa8cc8227a | ||
|
|
2b423244a5 | ||
|
|
f68fb0cd33 | ||
|
|
8440931ce7 | ||
|
|
0a93ade47d | ||
|
|
423523c75c | ||
|
|
4ce528bcaf | ||
|
|
f5394aae07 | ||
|
|
b696befb6a | ||
|
|
db57b62803 | ||
|
|
436ad5e0ba | ||
|
|
0551fda203 | ||
|
|
1bbfd3d856 | ||
|
|
31a413f4f5 | ||
|
|
4719f469e5 | ||
|
|
f289997215 | ||
|
|
01a05750d9 | ||
|
|
0b999e9c85 | ||
|
|
60b313dbb0 | ||
|
|
7fd976cab4 | ||
|
|
aa798c9403 | ||
|
|
8b77e3b149 | ||
|
|
87dc2b1d9f | ||
|
|
d722dc28b5 | ||
|
|
7ddcef6e35 | ||
|
|
ed19a2d0c4 | ||
|
|
3b9d8bfd49 | ||
|
|
d265f63589 | ||
|
|
26035a01ed | ||
|
|
06079c8b36 | ||
|
|
813ab1b1eb | ||
|
|
bfb4d42b27 | ||
|
|
ff1cbac448 | ||
|
|
71333c8331 | ||
|
|
f17339a441 | ||
|
|
168e486a46 | ||
|
|
568dbcbb52 | ||
|
|
e78f2fd964 | ||
|
|
a71dddbaa5 | ||
|
|
bebf685e9e | ||
|
|
6199a1de9c | ||
|
|
84e7186174 | ||
|
|
1186f30647 | ||
|
|
7bf0981665 | ||
|
|
7c121fddc6 | ||
|
|
f3efca85b5 | ||
|
|
b1f50cb245 | ||
|
|
5f11bb1e8f | ||
|
|
e8cc6d253e | ||
|
|
1da913941b | ||
|
|
7559f08a3c | ||
|
|
c0959b53a0 | ||
|
|
c15b6032be | ||
|
|
dcb18495dd | ||
|
|
2c585ef547 | ||
|
|
1301d057c8 | ||
|
|
9e136ee931 | ||
|
|
d1fc4b3e87 | ||
|
|
d8ca8514b6 | ||
|
|
f92f4b14c8 | ||
|
|
9c4b503403 | ||
|
|
b961406e8b | ||
|
|
991c46f910 | ||
|
|
3e10acb49d | ||
|
|
23b87be176 | ||
|
|
d3a4c270bd | ||
|
|
26f6352bf1 | ||
|
|
031ab0154a | ||
|
|
09a70bb1d3 | ||
|
|
d794fa69a9 | ||
|
|
18a73708ed | ||
|
|
78e4acad5e | ||
|
|
9cac6b3bf0 | ||
|
|
3b4a143a80 | ||
|
|
a4e44d7296 | ||
|
|
ce7d3d141f | ||
|
|
7da3201e75 | ||
|
|
367d056f34 | ||
|
|
419024ebd2 | ||
|
|
d522d0dea5 | ||
|
|
e0ccc89e81 | ||
|
|
23e56b75a8 | ||
|
|
c05cd16b8e | ||
|
|
8cd51299bf | ||
|
|
4bc22b4076 | ||
|
|
d9208074f8 | ||
|
|
e6d2c20598 | ||
|
|
b72f28b972 | ||
|
|
5736dfe8c7 | ||
|
|
f0e73b312d | ||
|
|
a5e5af96dd | ||
|
|
fdaa4321b1 | ||
|
|
304e5a0935 | ||
|
|
c42d254375 | ||
|
|
6e5bb1f5cc | ||
|
|
d76712628f | ||
|
|
94010686e4 | ||
|
|
81ecee58bd | ||
|
|
ddacda93a0 | ||
|
|
0c36cf7932 | ||
|
|
dc2e00e4d9 | ||
|
|
08ef176432 | ||
|
|
6fa7f38a23 | ||
|
|
6c60a1a760 | ||
|
|
2fb368f798 | ||
|
|
34cb8ab222 | ||
|
|
11bd996488 | ||
|
|
ce8af4251d | ||
|
|
dee2bf0880 | ||
|
|
38e4d06b17 | ||
|
|
2160ead15a | ||
|
|
75ad10adfa | ||
|
|
92133cf826 | ||
|
|
50085b9fca | ||
|
|
ec1ceb3e7f | ||
|
|
f241d19166 | ||
|
|
1ebfac4cdb | ||
|
|
5f7355d573 | ||
|
|
cc84f3f579 | ||
|
|
075dc41c48 | ||
|
|
fed2ec3de0 | ||
|
|
7b25597f2a | ||
|
|
381e4026a3 | ||
|
|
a013623b1e | ||
|
|
6539a5583d | ||
|
|
e16c37c89c | ||
|
|
c20d3da613 | ||
|
|
55237b8084 | ||
|
|
733c2d8277 | ||
|
|
bab3c98c23 | ||
|
|
76e793d4de | ||
|
|
6a5ec56aed | ||
|
|
c5f7ad61c4 | ||
|
|
952a7b2224 | ||
|
|
ed32c5e701 | ||
|
|
b41fc1dfae | ||
|
|
d7da98efcb | ||
|
|
b43c0abaee | ||
|
|
3cb5c32d22 | ||
|
|
07aab6b84a | ||
|
|
8e5f6bb3d7 | ||
|
|
c90660b61b | ||
|
|
a1c13cb414 | ||
|
|
2f64cc05a4 | ||
|
|
4fc20a3f1d | ||
|
|
2b9f415c32 | ||
|
|
b0f80cb89a | ||
|
|
91dafd608c | ||
|
|
bb34de36d5 | ||
|
|
8cbe8d8416 | ||
|
|
cbb9234591 | ||
|
|
086226dbec | ||
|
|
8fbc80d9c6 | ||
|
|
253885cb99 | ||
|
|
e113c1f734 | ||
|
|
59c35849f1 | ||
|
|
0feea4d192 | ||
|
|
b14e8a4c9b | ||
|
|
d98c006e29 | ||
|
|
36729b22df | ||
|
|
39272b99eb | ||
|
|
e9ad1a7a13 | ||
|
|
c2ee48cbbd | ||
|
|
010a531e5a | ||
|
|
f5b85e60ef | ||
|
|
d46ea7aa8a | ||
|
|
ef43322a62 | ||
|
|
eba9129fed | ||
|
|
64357493c7 | ||
|
|
78f53637c9 | ||
|
|
d206db0e1a | ||
|
|
63927a334d | ||
|
|
e2b32e24b5 | ||
|
|
a5c19ed87a | ||
|
|
546d6b4612 | ||
|
|
08485f1bc4 | ||
|
|
e44ecb3fd4 | ||
|
|
8b6d08d893 | ||
|
|
fd8e513fba | ||
|
|
b4128552e0 | ||
|
|
48d199ad85 | ||
|
|
14c8779e88 | ||
|
|
822b16713e | ||
|
|
2445f6d121 | ||
|
|
4fecc52166 | ||
|
|
782667bebb | ||
|
|
f07ea0f61d | ||
|
|
df74b33346 | ||
|
|
da94c36baa | ||
|
|
c993b6ce6f | ||
|
|
cf951dbcce | ||
|
|
26b583b011 | ||
|
|
217ef52eb4 | ||
|
|
b1b5644512 | ||
|
|
d04c4cd94f | ||
|
|
4bf92f8d93 | ||
|
|
44ce0c59ee | ||
|
|
72e0f42d62 | ||
|
|
ecd97df688 | ||
|
|
a4a3a73aec | ||
|
|
9719182bca | ||
|
|
2326212428 | ||
|
|
df6d8cdbfa | ||
|
|
6ed1f5f077 | ||
|
|
d906769bfb | ||
|
|
98196d3c6e | ||
|
|
c77cb396ff | ||
|
|
9a06f62799 | ||
|
|
7688206ecf | ||
|
|
141c8848e5 | ||
|
|
d38c2549d9 | ||
|
|
300b03ac7c | ||
|
|
2a792bfe8d | ||
|
|
f29a3194af | ||
|
|
79d33eaae4 | ||
|
|
63175b60f9 | ||
|
|
7c6e28eae8 | ||
|
|
0ec236206d | ||
|
|
263d474b61 | ||
|
|
089002467c | ||
|
|
4c16d144b6 | ||
|
|
aad2b3d420 | ||
|
|
36ea33714e | ||
|
|
e892a7a2e1 | ||
|
|
4cc6bfdd2d | ||
|
|
093d415e32 | ||
|
|
39799e91b6 | ||
|
|
b5520d4137 | ||
|
|
4652d9027f | ||
|
|
059750ad4a | ||
|
|
431e71749d | ||
|
|
a85fb91a20 | ||
|
|
3332e4739b | ||
|
|
49ba7fc614 | ||
|
|
39ec8cfd99 | ||
|
|
4087ed1283 | ||
|
|
f9bfcc57fb | ||
|
|
5d8ee99daf | ||
|
|
a7651105b3 | ||
|
|
2e57770277 | ||
|
|
7c33f4003b | ||
|
|
6dca5a8836 | ||
|
|
200f84767d | ||
|
|
486ce5495a | ||
|
|
2bebf0d964 | ||
|
|
9c93e825ee | ||
|
|
b651a4deb8 | ||
|
|
fb05e738c5 | ||
|
|
0790a27e77 | ||
|
|
ffd00a77f9 | ||
|
|
6c1610e59a | ||
|
|
b099161024 | ||
|
|
7c8ddb752b | ||
|
|
cb75b7300f | ||
|
|
207db629d4 | ||
|
|
e756724e86 | ||
|
|
0c5e4ea1f3 | ||
|
|
c2da5e082c | ||
|
|
95752259c9 | ||
|
|
dc6568b9f8 | ||
|
|
5c6913c7aa | ||
|
|
499e8cb21e | ||
|
|
b03a6ed0f1 | ||
|
|
78d0ce9118 | ||
|
|
71ffcac6d1 | ||
|
|
a57123e643 | ||
|
|
c6e3ff10ff | ||
|
|
534cfb9bf3 | ||
|
|
ec3dd32136 | ||
|
|
4d74e3c404 | ||
|
|
c4d18763f1 | ||
|
|
be34904530 | ||
|
|
845a55dfcc | ||
|
|
bb99e9126c | ||
|
|
f093dddda1 | ||
|
|
31909d2ba9 | ||
|
|
787f822c2d | ||
|
|
5e52a8dea2 | ||
|
|
865f17f4af | ||
|
|
0b83d24874 | ||
|
|
5ac14299b7 | ||
|
|
5bd4e95993 | ||
|
|
18e3e6d51c | ||
|
|
deeb0b056e | ||
|
|
067b082f59 | ||
|
|
34c400903a | ||
|
|
8cfe7ff751 | ||
|
|
c45f0fef81 | ||
|
|
051f3bcf7d | ||
|
|
13f180f98c | ||
|
|
efad2514f9 | ||
|
|
a06cd10cff | ||
|
|
f6a35ed884 | ||
|
|
9f5eea45f1 | ||
|
|
40efcb54b8 | ||
|
|
549f89545e | ||
|
|
c46b8b3c89 | ||
|
|
53240965b9 | ||
|
|
95e26813a9 | ||
|
|
274bbb2572 | ||
|
|
7845984199 | ||
|
|
21cfd4d7e9 | ||
|
|
ca7fefe95c | ||
|
|
211a9eaec1 | ||
|
|
5d18da44f6 | ||
|
|
acbe4fe517 | ||
|
|
dbec1372e4 | ||
|
|
89cec14eb3 | ||
|
|
5eadcd26a2 | ||
|
|
22c0809aad | ||
|
|
dea6b1879a | ||
|
|
cea8035192 | ||
|
|
cd74627eb9 | ||
|
|
4d9dd64426 | ||
|
|
879924ecaf | ||
|
|
31a5423f7b | ||
|
|
a5c004415f | ||
|
|
425cce140a | ||
|
|
47989cc145 | ||
|
|
835ffc3349 | ||
|
|
23d992ad22 | ||
|
|
006f9dca78 | ||
|
|
eb4fc2275a | ||
|
|
eed22ac422 | ||
|
|
d925b8e3ac | ||
|
|
5de35d2e34 | ||
|
|
6b9d4d53a9 | ||
|
|
58fcf54ffc | ||
|
|
f9638000a1 | ||
|
|
0fabb82491 | ||
|
|
efe3ee4db9 | ||
|
|
0408798044 | ||
|
|
89078cf26d | ||
|
|
bad766f68b | ||
|
|
df397caa0a | ||
|
|
41c82802c6 | ||
|
|
c2d7a770c6 | ||
|
|
f10e06ebe4 | ||
|
|
b11bf77883 | ||
|
|
8403633ba8 | ||
|
|
a495168a18 | ||
|
|
e736db28f5 | ||
|
|
cddc7de007 | ||
|
|
35b18d07c7 | ||
|
|
b46d9fe23b | ||
|
|
0882c53851 | ||
|
|
fd453f881d | ||
|
|
1a79a838bc | ||
|
|
a0fe2879ad | ||
|
|
498434c268 | ||
|
|
29bfe1c824 | ||
|
|
8796b4f9af | ||
|
|
6d2db4bb25 | ||
|
|
1532a965cb | ||
|
|
c7bc184b12 | ||
|
|
f087d3d3eb | ||
|
|
d6a6b004a9 | ||
|
|
1875cb37cb | ||
|
|
12eaebeb2a | ||
|
|
380741361b | ||
|
|
90b905eae6 | ||
|
|
ed72f2ccf4 | ||
|
|
41c63e4629 | ||
|
|
36b0928ae6 | ||
|
|
cddb3bfa32 | ||
|
|
0404ced463 | ||
|
|
9eac390150 | ||
|
|
92b4cd1388 | ||
|
|
6f58f7fb6f | ||
|
|
f63e303af0 | ||
|
|
c04f700a8c | ||
|
|
261590c1f2 | ||
|
|
5ca2561022 | ||
|
|
b932479b76 | ||
|
|
f6d6a03f7e | ||
|
|
de0dc87d8f | ||
|
|
19de41405b | ||
|
|
0c9b68391b | ||
|
|
9ffb1f0d6f | ||
|
|
33db17b2a0 | ||
|
|
78bdfa8eb2 | ||
|
|
c20b513910 | ||
|
|
4f5af497fd | ||
|
|
59b62ceb1b | ||
|
|
6afd734562 | ||
|
|
87cfe9993c | ||
|
|
beb7d916b7 | ||
|
|
488a1d8d03 | ||
|
|
517cd772bf | ||
|
|
c2650d6a3a | ||
|
|
77d0671d6d | ||
|
|
5811ac805d | ||
|
|
453cfaadd7 | ||
|
|
2d4f686e0d | ||
|
|
35daad98f7 | ||
|
|
035c90a2b9 | ||
|
|
f5a19dbbfe | ||
|
|
17407969e3 | ||
|
|
50032c9b9c | ||
|
|
3d21b9c8c7 | ||
|
|
eaaecc94a9 | ||
|
|
34ce4c10de | ||
|
|
9d168353b0 | ||
|
|
062a518174 | ||
|
|
35e2a48606 | ||
|
|
27072ed4b7 | ||
|
|
eae293a761 | ||
|
|
58d44caae9 | ||
|
|
efd969e2ad | ||
|
|
f655c9190c | ||
|
|
6db574d8de | ||
|
|
c0626eb1e3 | ||
|
|
7c6375d0d2 | ||
|
|
255dc78994 | ||
|
|
e693a4f762 | ||
|
|
8961ac3a42 | ||
|
|
c02194817a | ||
|
|
ec1812e9f7 | ||
|
|
e310fe7ed9 | ||
|
|
81dd823945 | ||
|
|
c9725c13e0 | ||
|
|
0658113c5f | ||
|
|
a845c0589c | ||
|
|
c8bfab7ba6 | ||
|
|
7eeb8df5c6 | ||
|
|
8c8870c7bb | ||
|
|
eca23232c1 | ||
|
|
5e9eefc566 | ||
|
|
2e34e07a29 | ||
|
|
2c6bea5905 | ||
|
|
ad750cf7f2 | ||
|
|
570e524ba0 | ||
|
|
c2325f34b4 | ||
|
|
3d0c98b3a9 | ||
|
|
58617d100c | ||
|
|
d576398a73 | ||
|
|
150173a6fa | ||
|
|
36d4b06bac | ||
|
|
86c8f895fc | ||
|
|
f394e2ff36 | ||
|
|
2a60b711fe | ||
|
|
4d92b7bd66 | ||
|
|
9847cecbaf | ||
|
|
16320324c3 | ||
|
|
f48acf407e | ||
|
|
6bdb9479e5 | ||
|
|
53eaa171aa | ||
|
|
50b66492b8 | ||
|
|
f5f78b9925 | ||
|
|
afb212100a | ||
|
|
e1507aea7d | ||
|
|
4ce5e54f3b | ||
|
|
22cd5006b5 | ||
|
|
b300d6a7f1 | ||
|
|
454db63809 | ||
|
|
6a5d176b79 | ||
|
|
3ac87d3029 | ||
|
|
93f07b4381 | ||
|
|
39075cb65f | ||
|
|
5f91ec5cbf | ||
|
|
d11f0c3d33 | ||
|
|
24fc86026a | ||
|
|
2612cf6fb1 | ||
|
|
70de695222 | ||
|
|
4ab5ed4e71 | ||
|
|
d8093bf08c | ||
|
|
4ab68cea04 | ||
|
|
3ec9dbed15 | ||
|
|
1e17bb9e22 | ||
|
|
5e60096298 | ||
|
|
f3ce54b2e4 | ||
|
|
da4a328c06 | ||
|
|
6352b5b06e | ||
|
|
1fa75bab57 | ||
|
|
d028ee9d28 | ||
|
|
1d70d0540f | ||
|
|
d5ea62c752 | ||
|
|
09d008660d | ||
|
|
960e3c8724 | ||
|
|
e83d3491a3 | ||
|
|
ce8ecfe80f | ||
|
|
b4cfd74aef | ||
|
|
e34fa54339 | ||
|
|
18225f36ff | ||
|
|
84cde25e62 | ||
|
|
d9406987bd | ||
|
|
4bf9e8d09f | ||
|
|
b7646eee19 | ||
|
|
95029bec5d | ||
|
|
2bb4544b23 | ||
|
|
10382a18ca | ||
|
|
11bf98f701 | ||
|
|
82280d3b9c | ||
|
|
30ca9add9c | ||
|
|
45c1a04fcb | ||
|
|
985751fdcf | ||
|
|
a861faaf72 | ||
|
|
4f7246afef | ||
|
|
683fab3cc6 | ||
|
|
f50b14adca | ||
|
|
3e7d908b79 | ||
|
|
d0c15fe628 | ||
|
|
7698e03471 | ||
|
|
4190397970 | ||
|
|
8ec0f2b2ce | ||
|
|
689e351a52 | ||
|
|
46a6707206 | ||
|
|
a99ec9e921 | ||
|
|
7c404235e3 | ||
|
|
342e6586e6 | ||
|
|
9282d380d4 | ||
|
|
8ca29cdd50 | ||
|
|
9c3e153108 | ||
|
|
c22d1897a0 | ||
|
|
1aebed1631 | ||
|
|
a8097f2a3f | ||
|
|
bf3ec045f3 | ||
|
|
cb7ac01143 | ||
|
|
91fcf91010 | ||
|
|
64059a9989 | ||
|
|
03a4eebc79 | ||
|
|
035557d855 | ||
|
|
e3fbbac6c1 | ||
|
|
b5d66ab697 | ||
|
|
976436ddcb | ||
|
|
109d6c9c7a | ||
|
|
c870c085b3 | ||
|
|
83db3b00bb | ||
|
|
39f45173a8 | ||
|
|
27e65d614f | ||
|
|
e2133c5092 | ||
|
|
402cf0db5b | ||
|
|
099a4c9709 | ||
|
|
1fac25733c | ||
|
|
85731eee90 | ||
|
|
31c4270871 | ||
|
|
fd8f1a6f54 | ||
|
|
a5dc31a6f4 | ||
|
|
f97e7c3404 | ||
|
|
8ac2fbbd02 | ||
|
|
8f107886a3 | ||
|
|
7762e4979c | ||
|
|
19a62d341d | ||
|
|
1779489531 | ||
|
|
efb41a23a4 | ||
|
|
b172cad7b5 | ||
|
|
7fe4d22875 | ||
|
|
6c5d36e52d | ||
|
|
61066c7264 | ||
|
|
84bfe0b565 | ||
|
|
f79d5aba58 | ||
|
|
9a0277df5d | ||
|
|
af06d4363d | ||
|
|
f1def359ad |
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"project.name" : "Kdenlive",
|
||||
"phabricator.uri" : "https://phabricator.kde.org/"
|
||||
}
|
||||
@@ -1,16 +1,17 @@
|
||||
project(Kdenlive)
|
||||
cmake_minimum_required(VERSION 3.0)
|
||||
|
||||
# An odd patch version number means development version, while an even one means
|
||||
# stable release. An additional number can be used for bugfix-only releases.
|
||||
|
||||
# KDE Application Version, managed by release script
|
||||
set(KDE_APPLICATIONS_VERSION_MAJOR "20")
|
||||
set(KDE_APPLICATIONS_VERSION_MINOR "04")
|
||||
set(KDE_APPLICATIONS_VERSION_MICRO "0")
|
||||
set (RELEASE_SERVICE_VERSION_MAJOR "20")
|
||||
set (RELEASE_SERVICE_VERSION_MINOR "11")
|
||||
set (RELEASE_SERVICE_VERSION_MICRO "70")
|
||||
|
||||
set(KDENLIVE_VERSION ${KDE_APPLICATIONS_VERSION_MAJOR}.${KDE_APPLICATIONS_VERSION_MINOR}.${KDE_APPLICATIONS_VERSION_MICRO})
|
||||
set(KDENLIVE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}")
|
||||
|
||||
project(Kdenlive VERSION ${KDENLIVE_VERSION})
|
||||
|
||||
cmake_minimum_required(VERSION 3.0)
|
||||
if(POLICY CMP0063)
|
||||
cmake_policy(SET CMP0063 NEW)
|
||||
endif()
|
||||
@@ -18,13 +19,6 @@ if(POLICY CMP0053)
|
||||
cmake_policy(SET CMP0053 NEW)
|
||||
endif()
|
||||
|
||||
if(BUILD_FUZZING)
|
||||
set(CMAKE_CXX_FLAGS "${KDENLIVE_CXX_FLAGS} -fsanitize=fuzzer-no-link,address")
|
||||
endif()
|
||||
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-warning-option")
|
||||
endif()
|
||||
|
||||
# To be switched on when releasing.
|
||||
option(RELEASE_BUILD "Remove Git revision from program version" ON)
|
||||
option(BUILD_TESTING "Build tests" ON)
|
||||
@@ -59,7 +53,7 @@ find_package(KF5 REQUIRED COMPONENTS Archive Bookmarks CoreAddons Config ConfigW
|
||||
set(QT_MIN_VERSION 5.11.0)
|
||||
find_package(Qt5 REQUIRED COMPONENTS Core DBus Widgets Svg Quick QuickControls2 Concurrent QuickWidgets Multimedia)
|
||||
add_definitions(-DQT_NO_CAST_TO_ASCII -DQT_NO_URL_CAST_FROM_STRING)
|
||||
set(DEFAULT_CXX_FLAGS "${DEFAULT_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
|
||||
|
||||
# MLT
|
||||
find_package(MLT ${MLT_MIN_VERSION} REQUIRED)
|
||||
@@ -77,7 +71,7 @@ if(WIN32)
|
||||
set(MLT_PREFIX "..")
|
||||
else()
|
||||
set(MLT_PREFIX ${MLT_ROOT_DIR})
|
||||
find_package(Qt5 OPTIONAL_COMPONENTS WebKitWidgets QUIET)
|
||||
find_package(Qt5 OPTIONAL_COMPONENTS WebEngineWidgets QUIET)
|
||||
endif()
|
||||
|
||||
if(KF5FileMetaData_FOUND)
|
||||
@@ -125,7 +119,11 @@ feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAG
|
||||
|
||||
set(FFMPEG_SUFFIX "" CACHE STRING "FFmpeg custom suffix")
|
||||
configure_file(config-kdenlive.h.cmake config-kdenlive.h @ONLY)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wno-suggest-override")
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
|
||||
|
||||
if(BUILD_FUZZING)
|
||||
set(ECM_ENABLE_SANITIZERS fuzzer;address)
|
||||
endif()
|
||||
|
||||
# Sources
|
||||
add_subdirectory(src)
|
||||
@@ -143,33 +141,11 @@ else()
|
||||
install(FILES kdenlive.categories DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR})
|
||||
endif()
|
||||
|
||||
############################
|
||||
# Tests
|
||||
############################
|
||||
|
||||
if(BUILD_TESTING)
|
||||
message(STATUS "Building tests")
|
||||
add_subdirectory(tests)
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fexceptions")
|
||||
include_directories(
|
||||
${CMAKE_BINARY_DIR}
|
||||
${CMAKE_BINARY_DIR}/src
|
||||
${MLT_INCLUDE_DIR}
|
||||
${MLTPP_INCLUDE_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/lib/external
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/lib
|
||||
src)
|
||||
add_executable(runTests ${Tests_SRCS})
|
||||
set_property(TARGET runTests PROPERTY CXX_STANDARD 14)
|
||||
target_link_libraries(runTests kdenliveLib)
|
||||
add_test(NAME runTests COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/runTests -d yes)
|
||||
endif()
|
||||
|
||||
if(BUILD_FUZZING)
|
||||
message(STATUS "Building fuzzing")
|
||||
set(CMAKE_CXX_COMPILER /usr/bin/clang++)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${KDENLIVE_CXX_FLAGS} -fsanitize=fuzzer-no-link,address")
|
||||
if(BUILD_FUZZING AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang"))
|
||||
add_subdirectory(fuzzer)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||

|
||||
|
||||
| Jenkins CI Name | Master | Stable |
|
||||
| --------------- | ------ | ------ |
|
||||
| OpenSuse Qt 5.14 | [](https://build.kde.org/job/Applications/job/kdenlive/job/kf5-qt5%20SUSEQt5.14//) |[](https://build.kde.org/job/Applications/job/kdenlive/job/stable-kf5-qt5%20SUSEQt5.14/)|
|
||||
| FreeBSD Qt 5.15 | [](https://build.kde.org/job/Applications/job/kdenlive/job/kf5-qt5%20FreeBSDQt5.15/) |[](https://build.kde.org/job/Applications/job/kdenlive/job/stable-kf5-qt5%20FreeBSDQt5.15/)|
|
||||
|
||||
# About Kdenlive
|
||||
|
||||
[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.
|
||||
[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 License Version 2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html).
|
||||
|
||||
# Building from source
|
||||
|
||||
|
||||
@@ -6,12 +6,12 @@ add_subdirectory(lumas)
|
||||
add_subdirectory(man)
|
||||
add_subdirectory(titles)
|
||||
add_subdirectory(profiles)
|
||||
add_subdirectory(shortcuts)
|
||||
|
||||
install(FILES
|
||||
banner.png
|
||||
encodingprofiles.rc
|
||||
externalproxies.rc
|
||||
metadata.properties
|
||||
meta_ffmpeg.png
|
||||
meta_libav.png
|
||||
meta_magiclantern.png
|
||||
@@ -21,10 +21,16 @@ install(FILES
|
||||
timeline_vthumbs.png
|
||||
kdenliveeffectscategory.rc
|
||||
kdenlivetranscodingrc
|
||||
kdenlivedefaultlayouts.rc
|
||||
|
||||
DESTINATION ${DATA_INSTALL_DIR}/kdenlive)
|
||||
install(FILES kdenlive.notifyrc DESTINATION ${KNOTIFYRC_INSTALL_DIR})
|
||||
install(FILES kdenlive_renderprofiles.knsrc kdenlive_wipes.knsrc kdenlive_keyboardschemes.knsrc kdenlive_titles.knsrc DESTINATION ${CONFIG_INSTALL_DIR})
|
||||
if(KF5NewStuff_VERSION VERSION_GREATER "5.56.0")
|
||||
install(FILES kdenlive_renderprofiles.knsrc kdenlive_wipes.knsrc kdenlive_keyboardschemes.knsrc kdenlive_titles.knsrc DESTINATION ${KDE_INSTALL_KNSRCDIR})
|
||||
else()
|
||||
install(FILES kdenlive_renderprofiles.knsrc kdenlive_wipes.knsrc kdenlive_keyboardschemes.knsrc kdenlive_titles.knsrc DESTINATION ${CONFIG_INSTALL_DIR})
|
||||
endif()
|
||||
|
||||
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})
|
||||
|
||||
@@ -106,7 +106,6 @@ avfilter.drawbox
|
||||
avfilter.drawgraph
|
||||
avfilter.drawgrid
|
||||
avfilter.elbg
|
||||
avfilter.eq
|
||||
avfilter.floodfill
|
||||
avfilter.fspp
|
||||
avfilter.gblur
|
||||
|
||||
@@ -28,6 +28,7 @@ mute.xml
|
||||
normalise.xml
|
||||
oldfilm.xml
|
||||
pan_zoom.xml
|
||||
pillar_echo.xml
|
||||
obscure.xml
|
||||
region.xml
|
||||
rotation.xml
|
||||
@@ -140,6 +141,7 @@ tcolor.xml
|
||||
tracker.xml
|
||||
vignette.xml
|
||||
vidstab.xml
|
||||
qtcrop.xml
|
||||
|
||||
DESTINATION ${DATA_INSTALL_DIR}/kdenlive/effects)
|
||||
|
||||
|
||||
@@ -50,6 +50,11 @@ The rest:
|
||||
- tag "comment": (optional) description of the parameter (support HTML formatting) (not yet supported by all widgets)
|
||||
- attribute "name": MLT filter parameter name
|
||||
- attribute "paramprefix": a string to be prepended to the parameter value before passing it to MLT
|
||||
- attribute "suffix": a string to be appended to the parameter (for UI display only)
|
||||
- attribute "min": the minimal accepted value
|
||||
- attribute "max": the maximal accepted value
|
||||
- attribute "visualmin": the minimal value displayed in timeline keyframes (can be > than min)
|
||||
- attribute "visualmax": the maximal value displayed in timeline keyframes (can be < than max)
|
||||
- attribute "default": initial value, format depends on parameter type
|
||||
- attribute "optional": if it is set, it means that this parameter can have an empty value. So then loading a project, don't set its value to default
|
||||
- attribute "type": widget (GUI) to use
|
||||
|
||||
@@ -7,4 +7,6 @@ selectivecolor.xml
|
||||
avfilter_lut3d.xml
|
||||
unsharp.xml
|
||||
subtitles.xml
|
||||
eq.xml
|
||||
equalizer.xml
|
||||
DESTINATION ${DATA_INSTALL_DIR}/kdenlive/effects)
|
||||
|
||||
31
data/effects/avfilter/eq.xml
Normal file
@@ -0,0 +1,31 @@
|
||||
<!DOCTYPE kpartgui>
|
||||
<effect tag="avfilter.eq">
|
||||
<name>Video Equalizer</name>
|
||||
<description>Adjust Brightness, contrast, gamma, saturation</description>
|
||||
<author>libavfilter</author>
|
||||
<parameter type="constant" name="av.contrast" max="3" min="-3" default="1" decimals="2">
|
||||
<name>Contrast</name>
|
||||
</parameter>
|
||||
<parameter type="constant" name="av.brightness" max="1" min="-1" default="0" decimals="2">
|
||||
<name>Brightness</name>
|
||||
</parameter>
|
||||
<parameter type="constant" name="av.saturation" max="5" min="0" default="1" decimals="2">
|
||||
<name>Saturation</name>
|
||||
</parameter>
|
||||
<parameter type="constant" name="av.gamma" max="3" min="0" default="1" decimals="2">
|
||||
<name>Gamma</name>
|
||||
</parameter>
|
||||
<parameter type="constant" name="av.gamma_r" max="3" min="0" default="1" decimals="2">
|
||||
<name>Red Gamma</name>
|
||||
</parameter>
|
||||
<parameter type="constant" name="av.gamma_g" max="3" min="0" default="1" decimals="2">
|
||||
<name>Green Gamma</name>
|
||||
</parameter>
|
||||
<parameter type="constant" name="av.gamma_b" max="3" min="0" default="1" decimals="2">
|
||||
<name>Blue Gamma</name>
|
||||
</parameter>
|
||||
<parameter type="constant" name="av.gamma_weight" max="1" min="0" default="1" decimals="2">
|
||||
<name>Gamma Weight</name>
|
||||
</parameter>
|
||||
</effect>
|
||||
|
||||
23
data/effects/avfilter/equalizer.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<!DOCTYPE kpartgui>
|
||||
<effect tag="avfilter.equalizer" type="audio">
|
||||
<name>Audio Equalizer (avfilter)</name>
|
||||
<description>Apply two-pole peaking equalization (EQ) filter</description>
|
||||
<author>libavfilter</author>
|
||||
<parameter type="constant" name="av.f" max="24000" min="0" default="500">
|
||||
<name>Central Frequency</name>
|
||||
</parameter>
|
||||
<parameter type="list" name="av.t" default="q" paramlist="h;q;o;s;k">>
|
||||
<name>Width Type</name>
|
||||
<paramlistdisplay>Hertz,Q-Factor,Octave,Slope,None</paramlistdisplay>
|
||||
</parameter>
|
||||
<parameter type="constant" name="av.w" max="24000" min="1" default="100">
|
||||
<name>Band Width</name>
|
||||
</parameter>
|
||||
<parameter type="constant" name="av.g" max="600" min="-600" default="0" decimals="2">
|
||||
<name>Gain</name>
|
||||
</parameter>
|
||||
<parameter type="constant" name="av.m" max="1" min="0" default="1" decimals="2">
|
||||
<name>Mix</name>
|
||||
</parameter>
|
||||
</effect>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<name>Subtitles</name>
|
||||
<description>Render subtitles onto the video</description>
|
||||
<author>libavfilter</author>
|
||||
<parameter type="url" name="av.f" filter="*.ass *.srt">
|
||||
<parameter type="url" name="av.filename" filter="*.ass *.srt">
|
||||
<name>Subtitle file to apply</name>
|
||||
</parameter>
|
||||
</effect>
|
||||
|
||||
12
data/effects/pillar_echo.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<!DOCTYPE kpartgui>
|
||||
<effect tag="pillar_echo" id="pillar_echo">
|
||||
<name>Pillar Echo</name>
|
||||
<description>Create an echo effect (blur) outside of an area of interest.</description>
|
||||
<author>Meltytech, LLC</author>
|
||||
<parameter type="animatedrect" name="rect" default="25% 0% 50% 100%" fixed="1" opacity="false">
|
||||
<name>Rectangle</name>
|
||||
</parameter>
|
||||
<parameter type="constant" name="blur" max="50" min="0" default="4" suffix="%">
|
||||
<name>Blur</name>
|
||||
</parameter>
|
||||
</effect>
|
||||
18
data/effects/qtcrop.xml
Normal file
@@ -0,0 +1,18 @@
|
||||
<!DOCTYPE kpartgui>
|
||||
<effect tag="qtcrop" id="qtcrop" type="video">
|
||||
<name>Crop by padding</name>
|
||||
<description>This filter crops the image to a rounded rectangle or circle by padding it with a color.</description>
|
||||
<author>Dan Dennedy</author>
|
||||
<parameter type="animatedrect" name="rect" default="0 0 %width %height" opacity="false">
|
||||
<name>Rectangle</name>
|
||||
</parameter>
|
||||
<parameter type="animated" name="radius" default="0" min="0" max="1" decimals="2">
|
||||
<name>Radius</name>
|
||||
</parameter>
|
||||
<parameter type="bool" name="circle" default="0">
|
||||
<name>Circle</name>
|
||||
</parameter>
|
||||
<parameter type="color" name="color" default="0x00000000" alpha="1">
|
||||
<name>Padding Color</name>
|
||||
</parameter>
|
||||
</effect>
|
||||
@@ -3,7 +3,7 @@
|
||||
<name>Volume (keyframable)</name>
|
||||
<description>Adjust audio volume with keyframes</description>
|
||||
<author>Dan Dennedy</author>
|
||||
<parameter type="animated" name="level" default="0" max="60" min="-100" suffix="dB" scale="-1">
|
||||
<parameter type="animated" name="level" default="0" max="50" min="-100" visualmax="50" visualmin="-50" suffix="dB" scale="-1">
|
||||
<name>Gain</name>
|
||||
</parameter>
|
||||
</effect>
|
||||
|
||||
@@ -5,12 +5,16 @@ MPEG=qscale=4 ab=192k vcodec=mpeg2video acodec=mp2 threads=%threads;mpg
|
||||
|
||||
[proxy]
|
||||
x264=-vf scale=640:-2 -vcodec libx264 -g 1 -bf 0 -vb 0 -crf 20 -preset veryfast -acodec aac -ab 128k;mov
|
||||
x264-vaapi=-hwaccel vaapi -vaapi_device /dev/dri/renderD128 -i -vf format=nv12,hwupload,scale_vaapi=640:-2 -vcodec h264_vaapi -g 1 -bf 0 -vb 0 -crf 20 -acodec aac -ab 128k;mov
|
||||
x264-vaapi=-hwaccel vaapi -vaapi_device /dev/dri/renderD128 -i -vf format=nv12,hwupload,scale_vaapi=640:-2 -vcodec h264_vaapi -g 1 -bf 0 -qp 26 -acodec aac -ab 128k;mov
|
||||
x264-nvenc=-hwaccel cuvid -c:v %nvcodec -i -vf scale_npp=640:-2 -vcodec h264_nvenc -g 1 -bf 0 -vb 0 -preset fast -acodec copy;mov
|
||||
MPEG2=-vf scale=640:-2 -g 1 -bf 0 -vb 0 -qscale 6 -ab 128k -vcodec mpeg2video -acodec ac3;mpg
|
||||
MJPEG=-vf yadif,scale=640:-2 -qscale 3 -vcodec mjpeg -acodec pcm_s16le;mkv
|
||||
MJPEG-vaapi=-hwaccel vaapi -vaapi_device /dev/dri/renderD128 -i -vf format=nv12,hwupload,scale_vaapi=640:-2 -vcodec mjpeg_vaapi -acodec copy;mkv
|
||||
ProRes=-vcodec prores_ks -vb 0 -g 1 -bf 0 -vprofile 1 -vendor ap10 -qscale 1;mov
|
||||
NVENC H264=vcodec=nvenc_h264 vb=30000k rc=cbr acodec=aac ab=192k;mp4
|
||||
NVENC H265=vcodec=hevc_nvenc vb=30000k acodec=aac ab=192k;mp4
|
||||
VAAPI Intel=vaapi_device=/dev/dri/renderD128 vf=’format=nv12,hwupload’ vcodec=h264_vaapi vb=30000k acodec=aac ab=192k;mp4
|
||||
VAAPI AMD=hwaccel=vaapi hwaccel_device=renderD129 hwaccel_output_format=vaapi vcodec=h264_vaapi vb=30000k acodec=aac ab=192k;mp4
|
||||
|
||||
[screengrab]
|
||||
X264 mute=-crf 25 -vcodec libx264 -preset veryfast -threads 0;mov
|
||||
@@ -33,3 +37,7 @@ ProRes=vcodec=prores_ks vb=0 g=1 bf=0 vprofile=0 vendor=ap10 qscale=4 s=800x450;
|
||||
MJPEG=f=avi vcodec=mjpeg progressive=1 qscale=1;avi
|
||||
x264-nvenc=vcodec=h264_nvenc g=1 bf=0 profile=0 preset=fast qmin=10 qmax=30;mkv
|
||||
x264-vaapi=vcodec=h264_vaapi g=1 bf=0 profile=578;mkv
|
||||
NVENC H264=vcodec=nvenc_h264 vb=30000k rc=cbr acodec=aac ab=192k;mp4
|
||||
NVENC H265=vcodec=hevc_nvenc vb=30000k acodec=aac ab=192k;mp4
|
||||
VAAPI Intel=vaapi_device=/dev/dri/renderD128 vf=’format=nv12,hwupload’ vcodec=h264_vaapi vb=30000k acodec=aac ab=192k;mp4
|
||||
VAAPI AMD=hwaccel=vaapi hwaccel_device=renderD129 hwaccel_output_format=vaapi vcodec=h264_vaapi vb=30000k acodec=aac ab=192k;mp4
|
||||
|
||||
@@ -122,7 +122,7 @@ 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[sl]=Izrisovanje je poteklo
|
||||
Comment[sv]=Återgivningen är gjord
|
||||
Comment[tr]=Hazırlama bitti
|
||||
Comment[uk]=Виконання обробки завершено
|
||||
@@ -306,8 +306,8 @@ Action=Sound
|
||||
Name=Ready to capture
|
||||
Name[ar]=جاهز للالتقاط
|
||||
Name[bs]=Spreman za hvatanje
|
||||
Name[ca]=A punt per capturar
|
||||
Name[ca@valencia]=A punt per capturar
|
||||
Name[ca]=A punt per a capturar
|
||||
Name[ca@valencia]=A punt per a capturar
|
||||
Name[cs]=Připraven zachytávat
|
||||
Name[da]=Klar til at indfange
|
||||
Name[de]=Bereit zur Aufnahme
|
||||
@@ -390,7 +390,7 @@ Name[tr]=Hata
|
||||
Name[ug]=خاتالىق
|
||||
Name[uk]=Помилка
|
||||
Name[x-test]=xxErrorxx
|
||||
Name[zh_CN]=误差
|
||||
Name[zh_CN]=错误
|
||||
Name[zh_TW]=錯誤
|
||||
Comment=An error occurred in Kdenlive
|
||||
Comment[ar]=حدث خطأ في «كدينلايڤ»
|
||||
|
||||
@@ -22,6 +22,8 @@ Name[pl]=Układy klawiatur Kdenlive
|
||||
Name[pt]=Esquemas de Teclado do Kdenlive
|
||||
Name[pt_BR]=Esquemas de teclado do Kdenlive
|
||||
Name[ru]=Схемы горячих клавиш
|
||||
Name[sk]=Schémy klávesnice Kdenlive
|
||||
Name[sl]=Sheme tipkovnic Kdenlive
|
||||
Name[sv]=Kdenlive-tangentbordsinställningar
|
||||
Name[uk]=Схеми клавіатурних скорочень Kdenlive
|
||||
Name[x-test]=xxKdenlive Keyboard Schemesxx
|
||||
|
||||
13
data/kdenlivedefaultlayouts.rc
Normal file
@@ -0,0 +1,13 @@
|
||||
[Order]
|
||||
1=kdenlive_logging
|
||||
2=kdenlive_editing
|
||||
3=kdenlive_audio
|
||||
4=kdenlive_effects
|
||||
5=kdenlive_color
|
||||
|
||||
[Layouts]
|
||||
kdenlive_logging=Tk8tVEwAAAD/AAAAAP0AAAACAAAAAAAAB4AAAAGC/AIAAAAB/AAAAlkAAAGCAAAApQD////8AQAAAAP8AAAAAAAAAhoAAABgAP////oAAAAAAQAAAAT7AAAAHgBjAGwAaQBwAF8AcAByAG8AcABlAHIAdABpAGUAcwEAAAAA/////wAAAGABAAAD+wAAABgAZQBmAGYAZQBjAHQAXwBzAHQAYQBjAGsAAAAAJAAAAg4AAABgAQAAA/sAAAAWAGUAZgBmAGUAYwB0AF8AbABpAHMAdAAAAAAA/////wAAAGABAAAD+wAAAB4AdAByAGEAbgBzAGkAdABpAG8AbgBfAGwAaQBzAHQAAAAAAAAAANwAAABgAQAAA/sAAAAYAG4AbwB0AGUAcwBfAHcAaQBkAGcAZQB0AQAAAhsAAAVlAAAAZwEAAAP8AAAGcwAAAQ0AAAAAAP////r/////AgAAAAL7AAAADgBsAGkAYgByAGEAcgB5AAAAAAD/////AAAAsQEAAAP7AAAAHgBwAHIAbwBqAGUAYwB0AF8AbQBvAG4AaQB0AG8AcgAAAAAkAAACHQAAAOoBAAADAAAAAgAAB4AAAAI2/AEAAAAI+wAAABQAcwBjAHIAZQBlAG4AZwByAGEAYgAAAAAA/////wAAAGABAAAD+wAAABoAYQB1AGQAaQBvAHMAcABlAGMAdAByAHUAbQAAAAAA/////wAAAGYBAAAD+wAAABYAcAByAG8AagBlAGMAdABfAGIAaQBuAQAAAAAAAALkAAAAYAEAAAP7AAAAGABjAGwAaQBwAF8AbQBvAG4AaQB0AG8AcgEAAALlAAAENgAAAUQBAAAD+wAAAAoAbQBpAHgAZQByAQAABxwAAABkAAAAZAAAAGT7AAAAGAB1AG4AZABvAF8AaABpAHMAdABvAHIAeQAAAAAA/////wAAAGABAAAD+wAAABIAaABpAHMAdABvAGcAcgBhAG0AAAAD4wAAAd8AAAFKAQAAA/wAAAXSAAABrgAAAAAA/////AIAAAAD+wAAABYAdgBlAGMAdABvAHIAcwBjAG8AcABlAAAAACQAAAGQAAAAjgEAAAP7AAAAEAB3AGEAdgBlAGYAbwByAG0AAAAAJAAAARsAAABOAQAAA/sAAAAUAHIAZwBiAF8AcABhAHIAYQBkAGUAAAAAJAAAAmQAAABOAQAAAwAAAAAAAAGCAAAABAAAAAQAAAAIAAAACPwAAAABAAAAAgAAAAIAAAAWAG0AYQBpAG4AVABvAG8AbABCAGEAcgAAAAAA/////wAAAAAAAAAAAAAAGABlAHgAdAByAGEAVABvAG8AbABCAGEAcgAAAAAA/////wAAAAAAAAAA
|
||||
kdenlive_editing=AAAA/wAAAAD9AAAAAgAAAAEAAAFaAAAC9fwCAAAAAfwAAAIqAAAC9QAAAOYBAAAj+gAAAAACAAAAAvsAAAAKAG0AaQB4AGUAcgEAAAHwAAACCwAAAMIBAAAC+wAAABgAZQBmAGYAZQBjAHQAXwBzAHQAYQBjAGsBAAAAAP////8AAAB1AQAAAgAAAAIAAAlgAAABzfwBAAAACfsAAAAUAHMAYwByAGUAZQBuAGcAcgBhAGIAAAAAAP////8AAAC1AQAAA/sAAAAaAGEAdQBkAGkAbwBzAHAAZQBjAHQAcgB1AG0AAAAAAP////8AAAByAQAAA/wAAAAAAAAC1AAAAJcA////+gAAAAABAAAABfsAAAAWAHAAcgBvAGoAZQBjAHQAXwBiAGkAbgEAAAAA/////wAAAGABAAAD+wAAAB4AdAByAGEAbgBzAGkAdABpAG8AbgBfAGwAaQBzAHQBAAAAAP////8AAAAEAQAAA/sAAAAWAGUAZgBmAGUAYwB0AF8AbABpAHMAdAEAAAAA/////wAAAAQBAAAD+wAAAB4AYwBsAGkAcABfAHAAcgBvAHAAZQByAHQAaQBlAHMBAAAAAP////8AAABXAQAAA/sAAAAYAHUAbgBkAG8AXwBoAGkAcwB0AG8AcgB5AQAAAAD/////AAAAWwEAAAP8AAAC1QAAA1EAAAFEAP////oAAAAAAgAAAAL7AAAAGABjAGwAaQBwAF8AbQBvAG4AaQB0AG8AcgEAAABEAAABzQAAAMsBAAAC+wAAAA4AbABpAGIAcgBhAHIAeQEAAAAA/////wAAAJwBAAAC/AAABicAAAM5AAABRAD////6AAAAAAIAAAAC+wAAAB4AcAByAG8AagBlAGMAdABfAG0AbwBuAGkAdABvAHIBAAAAvwAAASwAAADLAQAAAvsAAAAYAG4AbwB0AGUAcwBfAHcAaQBkAGcAZQB0AQAAAAD/////AAAAjAEAAAL7AAAAFgB2AGUAYwB0AG8AcgBzAGMAbwBwAGUAAAAAAP////8AAAGzAQAAA/sAAAAQAHcAYQB2AGUAZgBvAHIAbQAAAAAA/////wAAAOMBAAAD+wAAABQAcgBnAGIAXwBwAGEAcgBhAGQAZQAAAAAA/////wAAAN0BAAAD+wAAABIAaABpAHMAdABvAGcAcgBhAG0AAAAAAP////8AAAGVAQAAAwAACAUAAAL1AAAABAAAAAQAAAAIAAAACPwAAAABAAAAAgAAAAIAAAAWAG0AYQBpAG4AVABvAG8AbABCAGEAcgEAAAAA/////wAAAAAAAAAAAAAAGABlAHgAdAByAGEAVABvAG8AbABCAGEAcgEAAAKd/////wAAAAAAAAAA
|
||||
kdenlive_audio=AAAA/wAAAAD9AAAAAgAAAAAAAAFfAAAD4vwCAAAAAvwAAAAeAAABeAAAAJMBAAAb+gAAAAEBAAAAA/sAAAAeAHQAcgBhAG4AcwBpAHQAaQBvAG4AXwBsAGkAcwB0AAAAAAD/////AAAABAEAAAP7AAAAFgBlAGYAZgBlAGMAdABfAGwAaQBzAHQBAAAAAAAAAQMAAAAEAQAAA/sAAAAWAHAAcgBvAGoAZQBjAHQAXwBiAGkAbgEAAAAA/////wAAAFgBAAAD/AAAAZcAAAJpAAAAjgEAABv6AAAAAAEAAAAC+wAAABgAZQBmAGYAZQBjAHQAXwBzAHQAYQBjAGsBAAAAAP////8AAABUAQAAA/sAAAAeAGMAbABpAHAAXwBwAHIAbwBwAGUAcgB0AGkAZQBzAQAAAAD/////AAAAVAEAAAMAAAACAAAGIAAAAf78AQAAAAr7AAAAGABuAG8AdABlAHMAXwB3AGkAZABnAGUAdAAAAAAA/////wAAAGQBAAAD+wAAAA4AbABpAGIAcgBhAHIAeQAAAAAA/////wAAAGQBAAAD+wAAABQAcwBjAHIAZQBlAG4AZwByAGEAYgAAAAAA/////wAAAFIBAAAD+wAAABgAdQBuAGQAbwBfAGgAaQBzAHQAbwByAHkAAAAAAP////8AAABYAQAAA/sAAAAKAG0AaQB4AGUAcgEAAAFgAAAESAAAARsBAAAD/AAABakAAAHXAAABRAD////8AgAAAAL8AAAAHgAAAV0AAADnAQAAG/oAAAAAAgAAAAL7AAAAHgBwAHIAbwBqAGUAYwB0AF8AbQBvAG4AaQB0AG8AcgEAAAAeAAAB7gAAAMsBAAAC+wAAABgAYwBsAGkAcABfAG0AbwBuAGkAdABvAHIBAAAAAP////8AAADLAQAAAvsAAAAaAGEAdQBkAGkAbwBzAHAAZQBjAHQAcgB1AG0BAAABfAAAAKAAAABzAQAAAvsAAAAWAHYAZQBjAHQAbwByAHMAYwBvAHAAZQAAAAAA/////wAAASoBAAAD+wAAABAAdwBhAHYAZQBmAG8AcgBtAAAAAAD/////AAAAogEAAAP7AAAAFAByAGcAYgBfAHAAYQByAGEAZABlAAAAAAD/////AAAAnwEAAAP7AAAAEgBoAGkAcwB0AG8AZwByAGEAbQAAAAAA/////wAAAU8BAAADAAAGIAAAAeMAAAABAAAAAgAAAAEAAAAC/AAAAAEAAAACAAAAAgAAABYAbQBhAGkAbgBUAG8AbwBsAEIAYQByAAAAAAD/////AAAAAAAAAAAAAAAYAGUAeAB0AHIAYQBUAG8AbwBsAEIAYQByAAAAAAD/////AAAAAAAAAAA
|
||||
kdenlive_effects=AAAA/wAAAAD9AAAAAgAAAAAAAAEDAAABn/wCAAAAAfsAAAAWAHAAcgBvAGoAZQBjAHQAXwBiAGkAbgEAAAI8AAABnwAAAHoBAAACAAAAAgAAB4AAAAIZ/AEAAAAN+wAAABgAbgBvAHQAZQBzAF8AdwBpAGQAZwBlAHQAAAAAAP////8AAABnAQAAA/sAAAAOAGwAaQBiAHIAYQByAHkAAAAAAP////8AAABnAQAAA/sAAAAUAHMAYwByAGUAZQBuAGcAcgBhAGIAAAAAAP////8AAABSAQAAA/sAAAAaAGEAdQBkAGkAbwBzAHAAZQBjAHQAcgB1AG0AAAAAAP////8AAABmAQAAA/wAAAAAAAACeQAAAFcA////+gAAAAABAAAAAvsAAAAYAGUAZgBmAGUAYwB0AF8AcwB0AGEAYwBrAQAAAAD/////AAAAVwEAAAP7AAAAHgBjAGwAaQBwAF8AcAByAG8AcABlAHIAdABpAGUAcwAAAAAA/////wAAAFcBAAAD/AAAAnoAAAGZAAAAiwD////6AAAAAQEAAAAC+wAAAB4AdAByAGEAbgBzAGkAdABpAG8AbgBfAGwAaQBzAHQBAAAAAP////8AAAAEAQAAA/sAAAAWAGUAZgBmAGUAYwB0AF8AbABpAHMAdAEAAAAA/////wAAAAQBAAAD/AAABBQAAAMHAAABRAD////6AAAAAQEAAAAC+wAAABgAYwBsAGkAcABfAG0AbwBuAGkAdABvAHIBAAAAAP////8AAAFEAQAAA/sAAAAeAHAAcgBvAGoAZQBjAHQAXwBtAG8AbgBpAHQAbwByAQAAAAD/////AAABRAEAAAP7AAAAGAB1AG4AZABvAF8AaABpAHMAdABvAHIAeQAAAAAA/////wAAAFsBAAAD+wAAAAoAbQBpAHgAZQByAQAABxwAAABkAAAAZAAAAGT7AAAAFgB2AGUAYwB0AG8AcgBzAGMAbwBwAGUAAAAAAP////8AAAEyAQAAA/sAAAAQAHcAYQB2AGUAZgBvAHIAbQAAAAAA/////wAAAKgBAAAD+wAAABQAcgBnAGIAXwBwAGEAcgBhAGQAZQAAAAAA/////wAAAKQBAAAD+wAAABIAaABpAHMAdABvAGcAcgBhAG0AAAAAAP////8AAAFKAQAAAwAABnwAAAGfAAAABAAAAAQAAAAIAAAACPwAAAABAAAAAgAAAAIAAAAWAG0AYQBpAG4AVABvAG8AbABCAGEAcgAAAAAA/////wAAAAAAAAAAAAAAGABlAHgAdAByAGEAVABvAG8AbABCAGEAcgAAAAAA/////wAAAAAAAAAA
|
||||
kdenlive_color=AAAA/wAAAAD9AAAAAwAAAAAAAAGQAAAD4vwCAAAAAfwAAAAeAAAD4gAAAHIA////+gAAAAABAAAAAvsAAAAYAGUAZgBmAGUAYwB0AF8AcwB0AGEAYwBrAQAAAAD/////AAAAVAEAAAP7AAAAHgBjAGwAaQBwAF8AcAByAG8AcABlAHIAdABpAGUAcwAAAAAA/////wAAAFQBAAADAAAAAQAAAWUAAAPi/AIAAAAE+wAAABgAYwBsAGkAcABfAG0AbwBuAGkAdABvAHIBAAAAHgAAAQcAAADLAQAAAvsAAAAQAHcAYQB2AGUAZgBvAHIAbQAAAAFDAAAAkgAAACsBAAAC+wAAABQAcgBnAGIAXwBwAGEAcgBhAGQAZQEAAAEmAAABNwAAACsBAAAC/AAAAl4AAAGiAAAAgwEAABv6AAAAAAEAAAAC+wAAABYAdgBlAGMAdABvAHIAcwBjAG8AcABlAQAABfkAAAGHAAABKgEAAAP7AAAAEgBoAGkAcwB0AG8AZwByAGEAbQEAAAAA/////wAAAU8BAAADAAAAAgAABIkAAAIH/AEAAAAH+wAAABgAbgBvAHQAZQBzAF8AdwBpAGQAZwBlAHQAAAAAAP////8AAABkAQAAA/sAAAAUAHMAYwByAGUAZQBuAGcAcgBhAGIAAAAAAP////8AAABSAQAAA/sAAAAaAGEAdQBkAGkAbwBzAHAAZQBjAHQAcgB1AG0AAAAAAP////8AAABnAQAAA/sAAAAKAG0AaQB4AGUAcgAAAAPaAAAAYQAAAGEAAABh/AAAAZEAAAFPAAAAqwD////6AAAAAAIAAAAE+wAAABYAZQBmAGYAZQBjAHQAXwBsAGkAcwB0AQAAAAD/////AAAAAwEAAAL7AAAAHgB0AHIAYQBuAHMAaQB0AGkAbwBuAF8AbABpAHMAdAEAAAAA/////wAAAAMBAAAC+wAAABYAcAByAG8AagBlAGMAdABfAGIAaQBuAQAAAAD/////AAAApQEAAAL7AAAADgBsAGkAYgByAGEAcgB5AQAAAAD/////AAAAkAEAAAL7AAAAHgBwAHIAbwBqAGUAYwB0AF8AbQBvAG4AaQB0AG8AcgEAAALhAAADOQAAAUQBAAAD+wAAABgAdQBuAGQAbwBfAGgAaQBzAHQAbwByAHkAAAAAAP////8AAABYAQAAAwAABIkAAAHaAAAAAQAAAAIAAAABAAAAAvwAAAABAAAAAgAAAAIAAAAWAG0AYQBpAG4AVABvAG8AbABCAGEAcgAAAAAA/////wAAAAAAAAAAAAAAGABlAHgAdAByAGEAVABvAG8AbABCAGEAcgAAAAAA/////wAAAAAAAAAA
|
||||
@@ -19,6 +19,11 @@ DNxHD 720p 59.94 fps 220 Mb/s=-s 1280x720 -r 60000/1001 -vb 220000k -threads 0 -
|
||||
DNxHD 720p 59.94 fps 145 Mb/s=-s 1280x720 -r 60000/1001 -vb 145000k -threads 0 -vcodec dnxhd -acodec copy %1.mov;High quality encoding
|
||||
Fix MPEG-1=-sameq -acodec copy -vcodec mpeg1video %1.mpg;Fix unplayable MPEG-1 files;;vcodec=mpeg1video
|
||||
Fix Ogg Theora=-sameq -vcodec libtheora -acodec copy %1.ogv;Fix unplayable OGG Theora files;;vcodec=theora
|
||||
ProRes 422 Proxy=-vcodec prores_ks -profile:v 0 -acodec pcm_s16le -ar 48000 -ac 2 %1.mov;High quality encoding
|
||||
ProRes 422 LT=-vcodec prores_ks -profile:v 1 -acodec pcm_s16le -ar 48000 -ac 2 %1.mov;High quality encoding
|
||||
ProRes 422 SQ=-vcodec prores_ks -profile:v 2 -acodec pcm_s16le -ar 48000 -ac 2 %1.mov;High quality encoding
|
||||
ProRes 422 HQ=-vcodec prores_ks -profile:v 3 -acodec pcm_s16le -ar 48000 -ac 2 %1.mov;High quality encoding
|
||||
ProRes 444 with alpha=-vcodec prores_ks -profile:v 4 -pix_fmt yuva444p10le -bits_per_mb 8000 -acodec pcm_s16le -ar 48000 -ac 2 %1.mov;High quality encoding with alpha channel
|
||||
Remux MPEG-2 PS/VOB=-vcodec copy -acodec copy %1.mpg;Fix audio sync in MPEG-2 vob files;;vcodec=mpeg2video
|
||||
Remux MPEG-2 PS/VOB=-vcodec copy -acodec copy %1.mpg;Fix audio sync in MPEG-2 vob files 2;
|
||||
Lossless Matroska=-sn -vcodec huffyuv -acodec flac %1.mkv;High quality lossless encoding
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
# data_show filters
|
||||
timecode=region
|
||||
.description=TimecodeOSD
|
||||
.properties.markup=filter[1].producer.text
|
||||
.composite.geometry=10/10:150x30
|
||||
.filter[0]=watermark
|
||||
.filter[0].resource=colour:0x000000A0
|
||||
.filter[0].composite.titles=1
|
||||
.filter[1]=watermark
|
||||
.filter[1].resource=pango:
|
||||
.filter[1].producer.text=
|
||||
.filter[1].producer.family=Monospace
|
||||
.filter[1].producer.size=24
|
||||
.filter[1].composite.titles=1
|
||||
.filter[1].composite.halign=right
|
||||
|
||||
@@ -155,7 +155,7 @@
|
||||
<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="nn">Intuitivt fleirsporsgrensesnitt</li>
|
||||
<li xml:lang="pl">Intuicyjny interfejs wielościeżkowy.</li>
|
||||
<li xml:lang="pt">Interface multi-faixas intuitiva.</li>
|
||||
<li xml:lang="pt-BR">Interface multifaixa intuitiva.</li>
|
||||
@@ -187,7 +187,7 @@
|
||||
<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="nn">Mange effektar og overgangar</li>
|
||||
<li xml:lang="pl">Wiele efektów i przejść.</li>
|
||||
<li xml:lang="pt">Diversos efeitos e transições.</li>
|
||||
<li xml:lang="pt-BR">Diversos efeitos e transições.</li>
|
||||
@@ -267,7 +267,33 @@
|
||||
</ul>
|
||||
</description>
|
||||
<releases>
|
||||
<release date="2020-04-15" version="20.04.0"/>
|
||||
<release version="20.08.3" date="2020-11-05"/>
|
||||
<release version="20.08.2" date="2020-10-08"/>
|
||||
<release version="20.08.1" date="2020-09-03">
|
||||
<artifacts>
|
||||
<artifact type="source">
|
||||
<location>https://download.kde.org/stable/release-service/20.08.1/src/kdenlive-20.08.1.tar.xz</location>
|
||||
<checksum type="sha256">f99e3f22c3d5e41a3ca251299d010ac2bc44933091c25d360104d562a1090873</checksum>
|
||||
<size type="download">11367852</size>
|
||||
</artifact>
|
||||
</artifacts>
|
||||
</release>
|
||||
<release version="20.08.0" date="2020-08-13">
|
||||
<artifacts>
|
||||
<artifact type="binary" platform="x86_64-appimage">
|
||||
<location>https://files.kde.org/kdenlive/release/kdenlive-20.08.0-x86_64.appimage</location>
|
||||
<checksum type="sha256">3e0174a00c0c0c6599b5de249947b32ce86bde5d0703273c7d5212f01743bb5c</checksum>
|
||||
<size type="download">220790824</size>
|
||||
<bundle type="appimage">kdenlive-20.08.0</bundle>
|
||||
</artifact>
|
||||
<artifact type="source">
|
||||
<location>https://download.kde.org/stable/release-service/20.08.0/src/kdenlive-20.08.0.tar.xz</location>
|
||||
<checksum type="sha256">89914ee37f5bbdd16051b0db4a6cfb6f8c3d748f47c9e28e5349920ca133c0bd</checksum>
|
||||
<size type="download">11367912</size>
|
||||
</artifact>
|
||||
</artifacts>
|
||||
</release>
|
||||
<release version="20.08.0" date="2020-08-13"/>
|
||||
</releases>
|
||||
<url type="homepage">https://kdenlive.org/</url>
|
||||
<url type="bugtracker">https://bugs.kde.org</url>
|
||||
@@ -276,8 +302,8 @@
|
||||
<screenshots>
|
||||
<screenshot type="default">
|
||||
<caption>Kdenlive Timeline</caption>
|
||||
<caption xml:lang="ca">Línia del temps del Kdenlive</caption>
|
||||
<caption xml:lang="ca-valencia">Línia del temps del Kdenlive</caption>
|
||||
<caption xml:lang="ca">Línia de temps del Kdenlive</caption>
|
||||
<caption xml:lang="ca-valencia">Línia de temps del Kdenlive</caption>
|
||||
<caption xml:lang="cs">Časová osa Kdenlive</caption>
|
||||
<caption xml:lang="da">Kdenlive tidslinje</caption>
|
||||
<caption xml:lang="de">Kdenlive-Zeitleiste</caption>
|
||||
@@ -291,10 +317,12 @@
|
||||
<caption xml:lang="it">Linea temporale Kdenlive</caption>
|
||||
<caption xml:lang="ko">Kdenlive 타임라인</caption>
|
||||
<caption xml:lang="nl">Kdenlive tijdlijn</caption>
|
||||
<caption xml:lang="nn">Tidslinje i Kdenlive</caption>
|
||||
<caption xml:lang="pt">Linha Temporal do Kdenlive</caption>
|
||||
<caption xml:lang="pt-BR">Linha do tempo do Kdenlive</caption>
|
||||
<caption xml:lang="ru">Монтажный стол Kdenlive</caption>
|
||||
<caption xml:lang="sk">Kdenlive časová os</caption>
|
||||
<caption xml:lang="sl">Časovnica Kdenlive</caption>
|
||||
<caption xml:lang="sv">Kdenlive tidslinje</caption>
|
||||
<caption xml:lang="uk">Монтажний стіл Kdenlive</caption>
|
||||
<caption xml:lang="x-test">xxKdenlive Timelinexx</caption>
|
||||
@@ -306,7 +334,9 @@
|
||||
<caption>Kdenlive Audio Adjustments</caption>
|
||||
<caption xml:lang="ca">Ajustaments de l'àudio del Kdenlive</caption>
|
||||
<caption xml:lang="ca-valencia">Ajustaments de l'àudio del Kdenlive</caption>
|
||||
<caption xml:lang="cs">Úpravy audia v Kdenlive</caption>
|
||||
<caption xml:lang="da">Kdenlive lydjusteringer</caption>
|
||||
<caption xml:lang="de">Kdenlive-Audioanpassungen</caption>
|
||||
<caption xml:lang="el">Kdenlive προσαρμογές ήχου</caption>
|
||||
<caption xml:lang="en-GB">Kdenlive Audio Adjustments</caption>
|
||||
<caption xml:lang="es">Ajustes de audio de Kdenlive</caption>
|
||||
@@ -317,10 +347,12 @@
|
||||
<caption xml:lang="it">Regolazioni audio Kdenlive</caption>
|
||||
<caption xml:lang="ko">Kdenlive 오디오 조정</caption>
|
||||
<caption xml:lang="nl">Kdenlive geluidsaanpassingen</caption>
|
||||
<caption xml:lang="nn">Lysjustering i Kdenlive</caption>
|
||||
<caption xml:lang="pt">Ajustes de Áudio do Kdenlive</caption>
|
||||
<caption xml:lang="pt-BR">Ajustes de áudio do Kdenlive</caption>
|
||||
<caption xml:lang="ru">Настройка звука Kdenlive</caption>
|
||||
<caption xml:lang="sk">Kdenlive prispôsobenie zvuku</caption>
|
||||
<caption xml:lang="sl">Prilagoditve zvoka Kdenlive</caption>
|
||||
<caption xml:lang="sv">Kdenlive ljudjusteringar</caption>
|
||||
<caption xml:lang="uk">Коригування звукових даних у Kdenlive</caption>
|
||||
<caption xml:lang="x-test">xxKdenlive Audio Adjustmentsxx</caption>
|
||||
@@ -345,10 +377,12 @@
|
||||
<caption xml:lang="it">Effetti Kdenlive</caption>
|
||||
<caption xml:lang="ko">Kdenlive 효과</caption>
|
||||
<caption xml:lang="nl">Kdenlive effecten</caption>
|
||||
<caption xml:lang="nn">Kdenlive-effektar</caption>
|
||||
<caption xml:lang="pt">Efeitos do Kdenlive</caption>
|
||||
<caption xml:lang="pt-BR">Efeitos do Kdenlive</caption>
|
||||
<caption xml:lang="ru">Эффекты Kdenlive</caption>
|
||||
<caption xml:lang="sk">Kdenlive efekty</caption>
|
||||
<caption xml:lang="sl">Učinki Kdenlive</caption>
|
||||
<caption xml:lang="sv">Kdenlive effekter</caption>
|
||||
<caption xml:lang="uk">Ефекти Kdenlive</caption>
|
||||
<caption xml:lang="x-test">xxKdenlive Effectsxx</caption>
|
||||
|
||||
@@ -121,6 +121,7 @@ Comment[zh_TW]=來自 KDE 的非線性影像編輯器
|
||||
Type=Application
|
||||
Exec=kdenlive %F
|
||||
Icon=kdenlive
|
||||
StartupWMClass=kdenlive
|
||||
X-DocPath=kdenlive/index.html
|
||||
X-DocPath[cs]=https://cs.wikibooks.org/wiki/Kdenlive
|
||||
Terminal=false
|
||||
|
||||
@@ -2,73 +2,36 @@
|
||||
<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="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>
|
||||
<comment xml:lang="cs">Dokument video projektu Kdenlive</comment>
|
||||
<comment xml:lang="da">Kdenlive videoprojekt-dokument</comment>
|
||||
<comment xml:lang="de">Kdenlive-Videoprojektdokument</comment>
|
||||
<comment xml:lang="el">Έγγραφο έργου βίντεο Kdenlive</comment>
|
||||
<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 Kdenlive</comment>
|
||||
<comment xml:lang="gl">Documento dun proxecto de vídeo de Kdenlive</comment>
|
||||
<comment xml:lang="id">Dokumen projek video Kdenlive</comment>
|
||||
<comment xml:lang="it">Progetto video Kdenlive</comment>
|
||||
<comment xml:lang="ko">Kdenlive 동영상 프로젝트 문서</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>
|
||||
<comment xml:lang="eu">Kdenlive-ko bideo-proiektuaren dokumentua</comment>
|
||||
<comment xml:lang="fr">Document de projet vidéo pour Kdenlive</comment>
|
||||
<comment xml:lang="it">Progetto video di Kdenlive</comment>
|
||||
<comment xml:lang="lt">Kdenlive video projekto dokumentas</comment>
|
||||
<comment xml:lang="nl">Video projectdocument van Kdenlive</comment>
|
||||
<comment xml:lang="nn">Kdenlive-videoprosjektdokument</comment>
|
||||
<comment xml:lang="pl">Dokument projektowy filmu w Kdenlive</comment>
|
||||
<comment xml:lang="pt">Documento de projecto de vídeo do Kdenlive</comment>
|
||||
<comment xml:lang="pt_BR">Documento de projeto de vídeo do Kdenlive</comment>
|
||||
<comment xml:lang="ru">Видеопроект Kdenlive</comment>
|
||||
<comment xml:lang="sk">Dokument video projektu Kdenlive</comment>
|
||||
<comment xml:lang="sl">Dokument video projekta Kdenlive</comment>
|
||||
<comment xml:lang="sv">Kdenlive-videoprojektdokument</comment>
|
||||
<comment xml:lang="tr">Kdenlive video proje belgesi</comment>
|
||||
<comment xml:lang="uk">документ відеопроєкту Kdenlive</comment>
|
||||
<comment xml:lang="zh_CN">Kdenlive 视频项目文档</comment>
|
||||
<comment xml:lang="zh_TW">Kdenlive 影片專案文件</comment>
|
||||
<sub-class-of type="video/mlt-playlist"/>
|
||||
<glob pattern="*.kdenlive"/>
|
||||
</mime-type>
|
||||
<mime-type type="application/x-kdenlivetitle">
|
||||
<comment>Kdenlive video title</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>
|
||||
<comment xml:lang="cs">Název videa Kdenlive</comment>
|
||||
<comment xml:lang="da">Kdenlive videotitel</comment>
|
||||
<comment xml:lang="de">Kdenlive-Videotitel</comment>
|
||||
<comment xml:lang="el">Τίτλος βίντεο Kdenlive</comment>
|
||||
<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 Kdenlive</comment>
|
||||
<comment xml:lang="gl">Título de vídeo de Kdenlive</comment>
|
||||
<comment xml:lang="id">Judul video Kdenlive</comment>
|
||||
<comment xml:lang="it">Titolo video Kdenlive</comment>
|
||||
<comment xml:lang="ko">Kdenlive 동영상 타이틀</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>
|
||||
<comment xml:lang="eu">Kdenlive-ko bideo-izenburua</comment>
|
||||
<comment xml:lang="fr">Titre de vidéo pour Kdenlive</comment>
|
||||
<comment xml:lang="it">Titolo video di Kdenlive</comment>
|
||||
<comment xml:lang="nl">Titel van Kdenlive-video</comment>
|
||||
<comment xml:lang="nn">Kdenlive-videotittel</comment>
|
||||
<comment xml:lang="pl">Tytuł filmu w Kdenlive</comment>
|
||||
<comment xml:lang="pt">Título de vídeo do Kdenlive</comment>
|
||||
<comment xml:lang="pt_BR">Título de vídeo do Kdenlive</comment>
|
||||
<comment xml:lang="ru">Видеотитры Kdenlive</comment>
|
||||
<comment xml:lang="sk">Názov videa Kdenlive</comment>
|
||||
<comment xml:lang="sl">Naslov videa Kdenlive</comment>
|
||||
<comment xml:lang="sv">Kdenlive-video</comment>
|
||||
<comment xml:lang="tr">Kdenlive video başlığı</comment>
|
||||
<comment xml:lang="uk">заголовок відео Kdenlive</comment>
|
||||
<comment xml:lang="zh_CN">Kdenlive 视频标题</comment>
|
||||
<comment xml:lang="zh_TW">Kdenlive 影片標題</comment>
|
||||
<sub-class-of type="application/xml"/>
|
||||
<glob pattern="*.kdenlivetitle"/>
|
||||
</mime-type>
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="22" width="22">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text{color:#4d4d4d}
|
||||
</style>
|
||||
</defs>
|
||||
<path fill="currentColor" fill-opacity=".498" stroke="currentColor" stroke-linecap="square" d="M3.5 3.5h15v15h-15z" class="ColorScheme-Text"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 376 B |
@@ -1,10 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="22" width="22">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text{color:#4d4d4d}
|
||||
</style>
|
||||
</defs>
|
||||
<path fill="none" stroke="currentColor" stroke-linecap="square" d="M3.5 3.5h15v15h-15z" class="ColorScheme-Text"/>
|
||||
<path opacity=".5" fill="currentColor" d="M5 5h4v4H5zm4 4h4v4H9zm-4 4h4v4H5zm8 0h4v4h-4zm0-8h4v4h-4z" class="ColorScheme-Text"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 481 B |
@@ -1,18 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="22" width="22">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text{color:#4d4d4d}
|
||||
</style>
|
||||
</defs>
|
||||
<path
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-linecap="square"
|
||||
d="M3.5 3.5h15v15h-15z"
|
||||
class="ColorScheme-Text"
|
||||
id="path4209" />
|
||||
<path
|
||||
style="fill:currentColor;fill-opacity:0.5;stroke:none;"
|
||||
d="M 11 5 L 11 11 L 17 11 L 17 5 L 11 5 z M 11 11 L 5 11 L 5 17 L 11 17 L 11 11 z "
|
||||
id="rect4757" class="ColorScheme-Text"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 584 B |
@@ -1,10 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text{color:#4d4d4d}
|
||||
</style>
|
||||
</defs>
|
||||
<path fill="currentColor" class="ColorScheme-Text" d="M4 16h24v12H4z"/>
|
||||
<path fill="currentColor" class="ColorScheme-Text" d="M16 4h12v13.73H16z"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 405 B |
@@ -1,11 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#4d4d4d;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path d="M12 4L9.523 9.266 4 10.11l4 4.1L7.055 20 12 17.266 16.945 20 16 14.21l4-4.1-5.523-.844L12 4z" fill="currentColor" class="ColorScheme-Text"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 387 B |
@@ -1,13 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#4d4d4d;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path style="fill:currentColor;fill-opacity:1;stroke:none"
|
||||
d="M 11,3 C 8.784,3 7,4.784 7,7 l 0,4 -2,0 c 0,2.666667 0,5.333333 0,8 4,0 8,0 12,0 l 0,-8 c -0.666667,0 -1.333333,0 -2,0 L 15,7 C 15,4.784 13.216,3 11,3 m 0,1 c 1.662,0 3,1.561 3,3.5 L 14,11 8,11 8,7.5 C 8,5.561 9.338,4 11,4"
|
||||
class="ColorScheme-Text"
|
||||
/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 558 B |
@@ -1,14 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#4d4d4d;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path
|
||||
style="fill:currentColor;fill-opacity:1;stroke:none"
|
||||
d="m11 3c-2.216 0-4 1.784-4 4v1h1v-.5c0-1.939 1.338-3.5 3-3.5 1.662 0 3 1.561 3 3.5v3.5h-5-1-1-1-1v1 7h1 10 1v-8h-1-1v-4c0-2.216-1.784-4-4-4m-5 9h10v6h-10v-6"
|
||||
class="ColorScheme-Text"
|
||||
/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 491 B |
@@ -1,9 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text{color:#4d4d4d}
|
||||
</style>
|
||||
</defs>
|
||||
<path d="M28 4v24H4z" fill="currentColor" class="ColorScheme-Text"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 322 B |
@@ -1,10 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#4d4d4d;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path style="color:currentColor;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:currentColor;solid-opacity:1;fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;filter-blend-mode:normal;filter-gaussianBlur-deviation:0" d="M7 11l-3 3 3 3 0-6zM15 11l0 6 3-3-3-3zM6.0234375 4.9941406L6.0234375 8.9941406 5.0234375 8.9941406 5.0234375 6.9941406 4.0234375 6.9941406 4.0234375 8.9941406 3.0234375 8.9941406 3.0234375 9.9941406 19.023438 9.9941406 19.023438 8.9941406 19 8.9941406 19 7 18 7 18 8.9941406 17.023438 8.9941406 17.023438 4.9941406 16.023438 4.9941406 16.023438 8.9941406 15.023438 8.9941406 15.023438 6.9941406 14.023438 6.9941406 14.023438 8.9941406 13.023438 8.9941406 13.023438 6.9941406 12.023438 6.9941406 12.023438 8.9941406 11.023438 8.9941406 11.023438 6.9941406 10.023438 6.9941406 10.023438 8.9941406 9.0234375 8.9941406 9.0234375 6.9941406 8.0234375 6.9941406 8.0234375 8.9941406 7.0234375 8.9941406 7.0234375 4.9941406 6.0234375 4.9941406zM10.5 11.5l0 2-2 0 0 1 2 0 0 2 1 0 0-2 2 0 0-1-2 0 0-2-1 0zM3 11H4V17H3zM18 11H19V17H18z" class="ColorScheme-Text"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.7 KiB |
@@ -1,9 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" id="svg2">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text{color:#4d4d4d}
|
||||
</style>
|
||||
</defs>
|
||||
<path style="color:currentColor;fill:currentColor;" class="ColorScheme-Text" d="m 6.0234375,4.9941406 0,4 -1,0 0,-2 -1,0 0,2 -1,0 0,1 16.0000005,0 0,-1 -0.02344,0 L 19,7 l -1,0 0,1.9941406 -0.976562,0 0,-4 -1,0 0,4 -1,0 0,-2 -1,0 0,2 -1,0 0,-2 -1,0 0,2 -1,0 0,-2 -1,0 0,2 -1.0000005,0 0,-2 -1,0 0,2 -1,0 0,-4 -1,0 z" id="path6"/>
|
||||
<path style="fill:#da4453" d="M 9.207,11.5 8.5,12.207 10.293,14 8.5,15.793 9.207,16.5 11,14.707 12.793,16.5 13.5,15.793 11.707,14 13.5,12.207 12.793,11.5 11,13.293 9.207,11.5 Z" class="ColorScheme-Text" id="path8"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 792 B |
@@ -1,12 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#4d4d4d;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path style="color:currentColor;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:currentColor;solid-opacity:1;fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;filter-blend-mode:normal;filter-gaussianBlur-deviation:0" d="M7 11l-3 3 3 3 0-6zM15 11l0 6 3-3-3-3zM6.0234375 4.9941406L6.0234375 8.9941406 5.0234375 8.9941406 5.0234375 6.9941406 4.0234375 6.9941406 4.0234375 8.9941406 3.0234375 8.9941406 3.0234375 9.9941406 19.023438 9.9941406 19.023438 8.9941406 19 8.9941406 19 7 18 7 18 8.9941406 17.023438 8.9941406 17.023438 4.9941406 16.023438 4.9941406 16.023438 8.9941406 15.023438 8.9941406 15.023438 6.9941406 14.023438 6.9941406 14.023438 8.9941406 13.023438 8.9941406 13.023438 6.9941406 12.023438 6.9941406 12.023438 8.9941406 11.023438 8.9941406 11.023438 6.9941406 10.023438 6.9941406 10.023438 8.9941406 9.0234375 8.9941406 9.0234375 6.9941406 8.0234375 6.9941406 8.0234375 8.9941406 7.0234375 8.9941406 7.0234375 4.9941406 6.0234375 4.9941406z" class="ColorScheme-Text"/>
|
||||
<path style="fill:#da4453" d="M 9.207,11.5 8.5,12.207 10.293,14 8.5,15.793 9.207,16.5 11,14.707 12.793,16.5 13.5,15.793 11.707,14 13.5,12.207 12.793,11.5 11,13.293 9.207,11.5 Z" class="ColorScheme-Text"/>
|
||||
<path style="color:currentColor;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:currentColor;solid-opacity:1;fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;filter-blend-mode:normal;filter-gaussianBlur-deviation:0" d="M3 11H4V17H3zM18 11H19V17H18z" class="ColorScheme-Text"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.6 KiB |
@@ -1,12 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#4d4d4d;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path style="color:currentColor;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:currentColor;solid-opacity:1;fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;filter-blend-mode:normal;filter-gaussianBlur-deviation:0" d="M 11 3 A 8 8 0 0 0 3 11 A 8 8 0 0 0 4.3945312 15.5 L 5.1171875 14.777344 A 7 7 0 0 1 4 11 A 7 7 0 0 1 11 4 A 7 7 0 0 1 14.773438 5.1210938 L 15.494141 4.4003906 A 8 8 0 0 0 11 3 z M 16.291016 5.0175781 L 15.582031 5.7265625 A 7 7 0 0 1 16.277344 6.4160156 L 16.988281 5.7050781 A 8 8 0 0 0 16.291016 5.0175781 z M 17.611328 6.4960938 L 16.890625 7.2167969 A 7 7 0 0 1 16.890625 7.21875 A 7 7 0 0 1 18 11 A 7 7 0 0 1 11 18 A 7 7 0 0 1 7.2226562 16.884766 L 6.5019531 17.605469 A 8 8 0 0 0 11 19 A 8 8 0 0 0 19 11 A 8 8 0 0 0 17.611328 6.4960938 z M 11 8 L 11 8.8945312 L 11.511719 8.3828125 L 11 8 z M 12.320312 8.9882812 L 11 10.308594 L 11 11.693359 L 13.111328 9.5820312 L 12.320312 8.9882812 z M 13.917969 10.189453 L 11 13.107422 L 11 14 L 15 11 L 13.917969 10.189453 z M 5.7246094 15.583984 L 5.0195312 16.289062 A 8 8 0 0 0 5.7070312 16.986328 L 6.4121094 16.28125 A 7 7 0 0 1 5.7246094 15.583984 z" class="ColorScheme-Text"/>
|
||||
<path style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#da4453;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="M 10 8 A 3 3 0 0 0 7 11 A 3 3 0 0 0 7.4003906 12.494141 L 10 9.8945312 L 10 8 z M 10 11.308594 L 8.0410156 13.267578 A 3 3 0 0 0 8.9003906 13.791016 L 10 12.691406 L 10 11.308594 z" class="ColorScheme-Text"/>
|
||||
<path style="color:currentColor;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:currentColor;solid-opacity:1;fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;marker:none;marker-start:none;marker-mid:none;marker-end:none;filter-blend-mode:normal;filter-gaussianBlur-deviation:0" d="M 18.29297,2.9999999 3,18.293 3.70703,19 19,3.7069999 l -0.70703,-0.707 z" class="ColorScheme-Text"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.4 KiB |
@@ -1,12 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#4d4d4d;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path d="m 11,3 c -4.432,0 -8,3.568 -8,8 0,4.432 3.568,8 8,8 4.432,0 8,-3.568 8,-8 0,-4.432 -3.568,-8 -8,-8 z m 0,1 c 3.878,0 7,3.122 7,7 0,3.878 -3.122,7 -7,7 C 7.122,18 4,14.878 4,11 4,7.122 7.122,4 11,4 Z" style="color:currentColor;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:currentColor;solid-opacity:1;fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;filter-blend-mode:normal;filter-gaussianBlur-deviation:0;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" class="ColorScheme-Text"/>
|
||||
<path d="M 9,14 13,11 9,8 Z" style="color:currentColor;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:currentColor;solid-opacity:1;fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;filter-blend-mode:normal;filter-gaussianBlur-deviation:0;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" transform="translate(2)" class="ColorScheme-Text"/>
|
||||
<path style="color:currentColor;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:currentColor;solid-opacity:1;fill:#da4453;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 10,8 a 3,3 0 0 0 -3,3 3,3 0 0 0 3,3 l 0,-6 z" class="ColorScheme-Text"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.5 KiB |
@@ -1,16 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" id="svg3760">
|
||||
<defs id="defs3762">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text{color:#4d4d4d}.ColorScheme-Background{color:#eff0f1}.ColorScheme-Highlight{color:#3daee9}.ColorScheme-ViewText{color:#31363b}.ColorScheme-ViewBackground{color:#fcfcfc}.ColorScheme-ViewHover{color:#93cee9}.ColorScheme-ViewFocus{color:#3daee9}.ColorScheme-ButtonText{color:#31363b}.ColorScheme-ButtonBackground{color:#eff0f1}.ColorScheme-ButtonHover{color:#93cee9}.ColorScheme-ButtonFocus{color:#3daee9}
|
||||
</style>
|
||||
</defs>
|
||||
<g id="layer1" class="ColorScheme-Text">
|
||||
<path d="M19 15l-1.614.574.735 1.547-1.545-.733L16 18l-.574-1.614-1.547.735.733-1.545L13 15l1.614-.574-.735-1.547 1.545.733L16 12l.574 1.614 1.547-.735-.733 1.545z" id="path4160-0" style="isolation:auto;mix-blend-mode:normal" color="#000" overflow="visible" fill="#fdbc4b" stroke-width="1.795"/>
|
||||
<path style="isolation:auto;mix-blend-mode:normal" d="M3 4v3h17V4H3zm1 1h1v1H4V5zm2 0h1v1H6V5zm2 0h1v1H8V5zm2 0h1v1h-1V5zm2 0h1v1h-1V5zm2 0h1v1h-1V5zm2 0h1v1h-1V5zm2 0h1v1h-1V5z" id="rect4146" color="currentColor" overflow="visible" fill="currentColor" stroke-width="2.8" stroke-opacity=".55"/>
|
||||
<path style="isolation:auto;mix-blend-mode:normal" d="M3 15v3h10v-1h-1v-2H3zm1 1h1v1H4v-1zm2 0h1v1H6v-1zm2 0h1v1H8v-1zm2 0h1v1h-1v-1z" id="rect4146-2" color="currentColor" overflow="visible" fill="currentColor" stroke-width="2.8" stroke-opacity=".55"/>
|
||||
<path style="isolation:auto;mix-blend-mode:normal" id="rect4212" color="currentColor" overflow="visible" fill="currentColor" stroke-width="2.8" stroke-opacity=".55" d="M4 6h1v10H4z"/>
|
||||
<path style="isolation:auto;mix-blend-mode:normal" id="rect4214" color="currentColor" overflow="visible" fill="currentColor" stroke-width="2.8" stroke-opacity=".55" d="M11 6h1v10h-1z"/>
|
||||
<path style="isolation:auto;mix-blend-mode:normal" id="rect4214-1" color="currentColor" overflow="visible" fill="currentColor" stroke-width="2.8" stroke-opacity=".55" d="M18 6h1v6h-1z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.1 KiB |
@@ -1,20 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="22" width="22">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text{color:#4d4d4d}
|
||||
</style>
|
||||
</defs>
|
||||
<g transform="translate(-284.053 -142.61)" fill="currentColor" class="ColorScheme-Text">
|
||||
<circle r="1" cy="147.701" cx="289.125"/>
|
||||
<path d="M291.93 146.7h8.124v2h-8.125z"/>
|
||||
</g>
|
||||
<g transform="translate(-284.053 -136.165)" fill="currentColor" class="ColorScheme-Text">
|
||||
<circle r="1" cy="147.701" cx="289.125"/>
|
||||
<path d="M291.93 146.7h8.124v2h-8.125z"/>
|
||||
</g>
|
||||
<g fill="currentColor" transform="translate(-551.286 -607.648)" class="ColorScheme-Text">
|
||||
<circle cx="556.358" cy="625.628" r="1"/>
|
||||
<path d="M559.162 624.628h8.125v2h-8.125z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 840 B |
@@ -1,12 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="22" width="22">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text{color:#4d4d4d}
|
||||
</style>
|
||||
</defs>
|
||||
<g fill="currentColor" class="ColorScheme-Text">
|
||||
<path d="M5.428 5.98h11v11h-11z"/>
|
||||
<path d="M6.46 4.512h1.28v2H6.46zm2.416 0h1.28v2h-1.28zm2.416 0h1.28v2h-1.28zm2.418 0h1.28v2h-1.28zm-7.22 12h1.28v2H6.49zm2.417 0h1.28v2h-1.28zm2.417 0h1.28v2h-1.28zm2.416 0h1.28v2h-1.28zM5.882 7.215v1.28h-2v-1.28zm0 2.417v1.28h-2v-1.28zm0 2.418v1.28h-2v-1.28zm0 2.415v1.28h-2v-1.28zM17.913 7.06v1.28h-2V7.06zm0 2.416v1.28h-2v-1.28zm0 2.417v1.28h-2v-1.28zm0 2.417v1.28h-2v-1.28z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 724 B |
@@ -1,9 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text{color:#4d4d4d}
|
||||
</style>
|
||||
</defs>
|
||||
<path fill="currentColor" class="ColorScheme-Text" d="M28 4v24H4c.995-12.86 6.892-22.32 24-24z"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 351 B |
@@ -1,10 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text{color:currentColor}
|
||||
</style>
|
||||
</defs>
|
||||
<path style="color:currentColor;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:currentColor;solid-opacity:1;fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;filter-blend-mode:normal;filter-gaussianBlur-deviation:0" d="M3 11H7V15H3z" class="ColorScheme-Text"/>
|
||||
<path style="fill:#da4453" d="M 8.707,10.5 8,11.207 9.793,13 8,14.793 8.707,15.5 10.5,13.707 12.293,15.5 13,14.793 11.207,13 13,11.207 12.293,10.5 10.5,12.293 8.707,10.5 Z" class="ColorScheme-Text"/>
|
||||
<path style="color:currentColor;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:currentColor;solid-opacity:1;fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;filter-blend-mode:normal;filter-gaussianBlur-deviation:0" d="M17 11l0-2-4 4 4 4 0-2 2 0 0-4zM6 10H7V11H6z" class="ColorScheme-Text"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.9 KiB |
@@ -1,11 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text{color:currentColor}
|
||||
</style>
|
||||
</defs>
|
||||
<path style="color:currentColor;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:currentColor;solid-opacity:1;fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;filter-blend-mode:normal;filter-gaussianBlur-deviation:0" d="M2 11H6V15H2z" class="ColorScheme-Text"/>
|
||||
<path d="m 7,9 6,0 0,5 -6,0 z" style="fill:#1d99f3"/>
|
||||
<path style="color:currentColor;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:currentColor;solid-opacity:1;fill:#1d99f3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="M 7,5 10,8 13,5 7,5 Z" class="ColorScheme-Text"/>
|
||||
<path style="color:currentColor;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:currentColor;solid-opacity:1;fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;filter-blend-mode:normal;filter-gaussianBlur-deviation:0" d="m 16,11 0,-2 4,4 -4,4 0,-2 -2,0 0,-4 z" class="ColorScheme-Text"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.4 KiB |
@@ -1,10 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text{color:#4d4d4d}
|
||||
</style>
|
||||
</defs>
|
||||
<path d="m 3,11 0,4 4,0 0,-4 -4,0 z m 12,0 0,4 4,0 0,-4 -4,0 z" style="color:currentColor;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:currentColor;solid-opacity:1;fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;marker:none;marker-start:none;marker-mid:none;marker-end:none;filter-blend-mode:normal;filter-gaussianBlur-deviation:0" class="ColorScheme-Text"/>
|
||||
<path style="fill:#da4453" d="M 9.207,10.5 8.5,11.207 10.293,13 8.5,14.793 9.207,15.5 11,13.707 12.793,15.5 13.5,14.793 11.707,13 13.5,11.207 12.793,10.5 11,12.293 9.207,10.5 Z"/>
|
||||
<path style="color:currentColor;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:currentColor;solid-opacity:1;fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="M6 10H7V11H6zM15 10H16V11H15z" class="ColorScheme-Text"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.8 KiB |
@@ -1,10 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text{color:#4d4d4d}
|
||||
</style>
|
||||
</defs>
|
||||
<path style="color:currentColor;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:currentColor;solid-opacity:1;fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;filter-blend-mode:normal;filter-gaussianBlur-deviation:0" d="M3 11H19V15H3z" class="ColorScheme-Text"/>
|
||||
<path fill="#1d99f3" d="M8 8h6v5H8z" class="ColorScheme-Text"/>
|
||||
<path style="color:currentColor;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:currentColor;solid-opacity:1;fill:#1d99f3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 8,4 3.000001,3 3,-3 L 8,4 Z" class="ColorScheme-Text"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.7 KiB |
@@ -1,12 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#4d4d4d;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path style="color:currentColor;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:currentColor;solid-opacity:1;fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;filter-blend-mode:normal;filter-gaussianBlur-deviation:0" d="M6.0234375 4.9941406l0 4-1 0 0-2-1 0 0 2-1 0 0 1 6.8613281 0 1.1386724-1.1386718 0-1.8613282-1 0 0 2-1.0000005 0 0-2-1 0 0 2-1 0 0-4-1 0zM12.023438 6.9941406l0 .8613282.861328-.8613282-.861328 0zM18 7l0 1.9941406-.976562 0 0-1.8964844-1 1 0 .8964844-.896485 0-1 1 4.896485 0 0-1-.02344 0L19 7 18 7zM7 11L4 14 4.9394531 14.939453 7 12.878906 7 11zM15 11l0 6 3-3-3-3z" class="ColorScheme-Text"/>
|
||||
<path style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;marker:none;marker-start:none;marker-mid:none;marker-end:none;filter-blend-mode:normal;filter-gaussianBlur-deviation:0" d="M 18.271261,2.9991929 2.9782908,18.292193 l 0.70703,0.707 15.2929702,-15.2930001 -0.70703,-0.707 z" class="ColorScheme-Text"/>
|
||||
<path style="color:currentColor;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:currentColor;solid-opacity:1;fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;filter-blend-mode:normal;filter-gaussianBlur-deviation:0" d="M18 11H19V17H18zM3 11L3 16.857422 4 15.857422 4 11 3 11z" class="ColorScheme-Text"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.8 KiB |
@@ -1,10 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#4d4d4d;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path style="color:currentColor;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:currentColor;solid-opacity:1;fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;filter-blend-mode:normal;filter-gaussianBlur-deviation:0" d="M7 11l-3 3 3 3 0-6zM15 11l0 6 3-3-3-3zM6.0234375 4.9941406L6.0234375 8.9941406 5.0234375 8.9941406 5.0234375 6.9941406 4.0234375 6.9941406 4.0234375 8.9941406 3.0234375 8.9941406 3.0234375 9.9941406 19.023438 9.9941406 19.023438 8.9941406 19 8.9941406 19 7 18 7 18 8.9941406 17.023438 8.9941406 17.023438 4.9941406 16.023438 4.9941406 16.023438 8.9941406 15.023438 8.9941406 15.023438 6.9941406 14.023438 6.9941406 14.023438 8.9941406 13.023438 8.9941406 13.023438 6.9941406 12.023438 6.9941406 12.023438 8.9941406 11.023438 8.9941406 11.023438 6.9941406 10.023438 6.9941406 10.023438 8.9941406 9.0234375 8.9941406 9.0234375 6.9941406 8.0234375 6.9941406 8.0234375 8.9941406 7.0234375 8.9941406 7.0234375 4.9941406 6.0234375 4.9941406zM3 11H4V17H3zM18 11H19V17H18z" class="ColorScheme-Text"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.7 KiB |
@@ -1,14 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#4d4d4d;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<g fill="currentColor" color="currentColor" class="ColorScheme-Text">
|
||||
<path style="isolation:auto;mix-blend-mode:normal;filter-blend-mode:normal;filter-gaussianBlur-deviation:0" d="M3 3v16h16V3zm1 4h14v11H4z" overflow="visible" class="ColorScheme-Text"/>
|
||||
<path style="isolation:auto;mix-blend-mode:normal;filter-blend-mode:normal;filter-gaussianBlur-deviation:0" d="M11 7v1h1V7h-1zm0 2v1h1V9h-1zm0 2v1h1v-1h-1zm0 2v1h1v-1h-1zm0 2v1h1v-1h-1zm0 2v1h1v-1h-1zM9.494 7.998l-1.685 3.37H4.996l2.248 2.247-.562 3.373 2.81-1.685.506.302V9.01l-.507-1.012z" overflow="visible"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 830 B |
@@ -1,15 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#4d4d4d;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<g fill="currentColor" class="ColorScheme-Text">
|
||||
<path d="M12.738 6.905l-.397-.397-3.438 3.44L7.85 11 8.9 12.053l3.44 3.44.396-.398-3.44-3.44L8.644 11l.656-.656 3.438-3.44z" stroke-width="0"/>
|
||||
<path d="M5.605 3v12.545h-1V3zM17.78 11.276h-7.44v-.593h7.44z"/>
|
||||
</g>
|
||||
<circle cx="5.097" cy="16.907" r="1.642" fill="none" stroke="currentColor" stroke-width=".892" class="ColorScheme-Text"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 644 B |
@@ -1,15 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#4d4d4d;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<g fill="currentColor" class="ColorScheme-Text">
|
||||
<path d="M9.255 6.905l.397-.397 3.44 3.44L14.144 11l-1.052 1.053-3.44 3.44-.397-.398 3.44-3.44.655-.655-.655-.656-3.44-3.44z" stroke-width="0"/>
|
||||
<path d="M16.39 3v12.545h1V3zM4.215 11.276h7.438v-.593H4.215z"/>
|
||||
</g>
|
||||
<circle cx="-16.896" cy="16.907" r="1.642" transform="scale(-1 1)" fill="none" stroke="currentColor" stroke-width=".892" class="ColorScheme-Text"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 669 B |
@@ -57,6 +57,18 @@
|
||||
audioqualities="3,5,7" defaultaudioquality="5"
|
||||
args="f=asf vcodec=wmv2 acodec=wmav2 qscale=%quality aq=%audioquality"/>
|
||||
</group>
|
||||
<group name="GPU | testing" renderer="avformat" type="av">
|
||||
<profile name="NVENC H264 CBR" extension="mp4"
|
||||
args="f=mp4 vcodec=nvenc_h264 vb=30000k rc=cbr acodec=aac ab=192k"/>
|
||||
<profile name="NVENC H264 VBR" extension="mp4"
|
||||
args="f=mp4 vcodec=nvenc_h264 vb=30000k minrate=20000k maxrate=60000k acodec=aac ab=192k"/>
|
||||
<profile name="NVENC H265" extension="mp4"
|
||||
args="f=mp4 vcodec=hevc_nvenc vb=30000k acodec=aac ab=192k"/>
|
||||
<profile name="VAAPI Intel H264" extension="mp4"
|
||||
args="f=mp4 vaapi_device=/dev/dri/renderD128 vf=’format=nv12,hwupload’ vcodec=h264_vaapi vb=30000k acodec=aac ab=192k"/>
|
||||
<profile name="VAAPI AMD H264" extension="mp4"
|
||||
args="f=mp4 hwaccel=vaapi hwaccel_device=renderD129 hwaccel_output_format=vaapi vcodec=h264_vaapi vb=30000k acodec=aac ab=192k"/>
|
||||
</group>
|
||||
<group name="Audio only" renderer="avformat" type="audio">
|
||||
<profile name="AC3" extension="ac3" audiobitrates="192,64" defaultaudiobitrate="160" args="ab=%audiobitrate+'k' vn=1"/>
|
||||
<profile name="ALAC" extension="mov" args="f=mov acodec=alac vn=1 video_off=1"/>
|
||||
|
||||
3
data/shortcuts/CMakeLists.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
INSTALL(FILES
|
||||
Premiere
|
||||
DESTINATION ${DATA_INSTALL_DIR}/kdenlive/shortcuts)
|
||||
100
data/shortcuts/Premiere
Normal file
@@ -0,0 +1,100 @@
|
||||
<gui name="kdenlive" version="1">
|
||||
<ActionProperties>
|
||||
<Action name="file_open" shortcut="Ctrl+O"/>
|
||||
<Action name="file_save_as" shortcut="Ctrl+Shift+S"/>
|
||||
<Action name="file_new" shortcut="Ctrl+N"/>
|
||||
<Action name="monitor_play" shortcut="Space"/>
|
||||
<Action name="monitor_pause" shortcut="K"/>
|
||||
<Action name="monitor_fullscreen" shortcut="`"/>
|
||||
<Action name="monitor_seek_backward" shortcut="J"/>
|
||||
<Action name="monitor_seek_backward-one-frame" shortcut="Left"/>
|
||||
<Action name="monitor_seek_backward-one-second" shortcut="Shift+Left"/>
|
||||
<Action name="monitor_seek_forward" shortcut="L"/>
|
||||
<Action name="seek_start" shortcut="Ctrl+Home"/>
|
||||
<Action name="seek_end" shortcut="Ctrl+End"/>
|
||||
<Action name="monitor_seek_forward-one-frame" shortcut="Right"/>
|
||||
<Action name="monitor_seek_forward-one-second" shortcut="Shift+Right"/>
|
||||
<Action name="seek_zone_start" shortcut="Shift+I"/>
|
||||
<Action name="seek_zone_end" shortcut="Shift+O"/>
|
||||
<Action name="mark_in" shortcut="I"/>
|
||||
<Action name="mark_out" shortcut="O"/>
|
||||
<Action name="collapse_expand" shortcut="<"/>
|
||||
<Action name="view_zoom_in" shortcut="=; Ctrl+="/>
|
||||
<Action name="view_zoom_out" shortcut="-"/>
|
||||
<Action name="select_tool" shortcut="V"/>
|
||||
<Action name="razor_tool" shortcut="C"/>
|
||||
<Action name="spacer_tool" shortcut="A"/>
|
||||
<Action name="automatic_transition" shortcut="Ctrl+D"/>
|
||||
<Action name="zoom_fit" shortcut="\"/>
|
||||
<Action name="project_render" shortcut="Ctrl+Return"/>
|
||||
<Action name="monitor_play_zone" shortcut="Ctrl+Space"/>
|
||||
<Action name="monitor_loop_zone" shortcut="Alt+Space"/>
|
||||
<Action name="import_project" shortcut="Ctrl+I"/>
|
||||
<Action name="switch_monitor" shortcut="T"/>
|
||||
<Action name="monitor_seek_snap_backward" shortcut="Alt+Left"/>
|
||||
<Action name="monitor_seek_guide_backward" shortcut="Ctrl+Left"/>
|
||||
<Action name="seek_clip_start" shortcut="Up"/>
|
||||
<Action name="seek_clip_end" shortcut="Down"/>
|
||||
<Action name="monitor_seek_snap_forward" shortcut="Alt+Right"/>
|
||||
<Action name="monitor_seek_guide_forward" shortcut="Ctrl+Right"/>
|
||||
<Action name="align_playhead" shortcut="P"/>
|
||||
<Action name="grab_item" shortcut="Shift+G"/>
|
||||
<Action name="overwrite_to_in_point" shortcut="."/>
|
||||
<Action name="insert_to_in_point" shortcut=","/>
|
||||
<Action name="remove_extract" shortcut="Shift+X"/>
|
||||
<Action name="remove_lift" shortcut="Z"/>
|
||||
<Action name="prerender_timeline_zone" shortcut="Return"/>
|
||||
<Action name="select_timeline_clip" shortcut="+"/>
|
||||
<Action name="select_add_timeline_clip" shortcut="Alt++"/>
|
||||
<Action name="select_timeline_transition" shortcut="Shift++"/>
|
||||
<Action name="deselect_timeline_transition" shortcut="Shift+-"/>
|
||||
<Action name="select_add_timeline_transition" shortcut="Shift+D"/>
|
||||
<Action name="add_marker_guide_quickly" shortcut="M"/>
|
||||
<Action name="add_clip_marker" shortcut="Ctrl+1"/>
|
||||
<Action name="edit_item_speed" shortcut="Ctrl+R"/>
|
||||
<Action name="cut_timeline_clip" shortcut="Ctrl+K"/>
|
||||
<Action name="delete_timeline_clip" shortcut="Del"/>
|
||||
<Action name="resize_timeline_clip_start" shortcut="Q"/>
|
||||
<Action name="resize_timeline_clip_end" shortcut="W"/>
|
||||
<Action name="paste_effects" shortcut="Ctrl+Alt+V"/>
|
||||
<Action name="group_clip" shortcut="Ctrl+G"/>
|
||||
<Action name="ungroup_clip" shortcut="Ctrl+Shift+G"/>
|
||||
<Action name="edit_copy" shortcut="Ctrl+C; Ctrl+Ins"/>
|
||||
<Action name="edit_paste" shortcut="Ctrl+V; Shift+Ins"/>
|
||||
<Action name="select_all_tracks" shortcut="Ctrl+A"/>
|
||||
<Action name="unselect_all_tracks" shortcut="Ctrl+Shift+A"/>
|
||||
<Action name="file_save" shortcut="Ctrl+S"/>
|
||||
<Action name="options_show_menubar" shortcut="Ctrl+M"/>
|
||||
<Action name="file_quit" shortcut="Ctrl+Q"/>
|
||||
<Action name="options_configure" shortcut="Ctrl+Shift+,"/>
|
||||
<Action name="fullscreen" shortcut="Ctrl+Shift+F"/>
|
||||
<Action name="edit_undo" shortcut="Ctrl+Z"/>
|
||||
<Action name="edit_redo" shortcut="Ctrl+Shift+Z"/>
|
||||
<Action name="switch_track_lock" shortcut="Shift+L"/>
|
||||
<Action name="switch_all_track_lock" shortcut="Ctrl+Shift+L"/>
|
||||
<Action name="switch_track_target" shortcut="Shift+T"/>
|
||||
<Action name="switch_all_targets" shortcut="Shift+A"/>
|
||||
<Action name="activate_all_targets" shortcut="Alt+Shift+A"/>
|
||||
<Action name="add_text_clip" shortcut="Ctrl+T"/>
|
||||
<Action name="duplicate_clip" shortcut="Ctrl+?"/>
|
||||
<Action name="clip_properties" shortcut="Ctrl+Shift+H"/>
|
||||
<Action name="renamefile" shortcut="F2"/>
|
||||
<Action name="go_up" shortcut="Alt+Up"/>
|
||||
<Action name="extract_frame" shortcut="S"/>
|
||||
<Action name="audiomixer_button" shortcut="("/>
|
||||
<Action name="transition_gain" shortcut="G"/>
|
||||
<Action name="load_layout1" shortcut="Ctrl+!"/>
|
||||
<Action name="load_layout2" shortcut="Ctrl+@"/>
|
||||
<Action name="load_layout3" shortcut="Ctrl+#"/>
|
||||
<Action name="load_layout4" shortcut="Ctrl+$"/>
|
||||
<Action name="Timeline" shortcut="#"/>
|
||||
<Action name="Screen Grab" shortcut="F5"/>
|
||||
<Action name="Project Bin" shortcut="!"/>
|
||||
<Action name="Effect/Composition Stack" shortcut="%"/>
|
||||
<Action name="Effects" shortcut="&"/>
|
||||
<Action name="Clip Monitor" shortcut="@"/>
|
||||
<Action name="Project Monitor" shortcut="$"/>
|
||||
<Action name="help_contents" shortcut="F1"/>
|
||||
<Action name="help_whats_this" shortcut="Shift+F1"/>
|
||||
</ActionProperties>
|
||||
</gui>
|
||||
82
data/shortcuts/Premiere (by Vignesh)
Normal file
@@ -0,0 +1,82 @@
|
||||
<gui name="kdenlive" version="1">
|
||||
<ActionProperties>
|
||||
<Action name="file_open" shortcut="Ctrl+O"/>
|
||||
<Action name="file_save_as" shortcut="Ctrl+Shift+S"/>
|
||||
<Action name="file_new" shortcut="Ctrl+N"/>
|
||||
<Action name="monitor_play" shortcut="Space"/>
|
||||
<Action name="monitor_pause" shortcut="K"/>
|
||||
<Action name="monitor_fullscreen" shortcut="`"/>
|
||||
<Action name="monitor_seek_backward" shortcut="J"/>
|
||||
<Action name="monitor_seek_backward-one-frame" shortcut="Left"/>
|
||||
<Action name="monitor_seek_backward-one-second" shortcut="Shift+Left"/>
|
||||
<Action name="monitor_seek_forward" shortcut="L"/>
|
||||
<Action name="seek_start" shortcut="Ctrl+Home"/>
|
||||
<Action name="seek_end" shortcut="Ctrl+End"/>
|
||||
<Action name="monitor_seek_forward-one-frame" shortcut="Right"/>
|
||||
<Action name="monitor_seek_forward-one-second" shortcut="Shift+Right"/>
|
||||
<Action name="seek_zone_start" shortcut="Shift+I"/>
|
||||
<Action name="seek_zone_end" shortcut="Shift+O"/>
|
||||
<Action name="mark_in" shortcut="I"/>
|
||||
<Action name="mark_out" shortcut="O"/>
|
||||
<Action name="collapse_expand" shortcut="<"/>
|
||||
<Action name="view_zoom_in" shortcut="=; Ctrl+="/>
|
||||
<Action name="view_zoom_out" shortcut="-"/>
|
||||
<Action name="select_tool" shortcut="V"/>
|
||||
<Action name="razor_tool" shortcut="C"/>
|
||||
<Action name="spacer_tool" shortcut="A"/>
|
||||
<Action name="automatic_transition" shortcut="Ctrl+D"/>
|
||||
<Action name="zoom_fit" shortcut="\"/>
|
||||
<Action name="project_render" shortcut="Ctrl+Return"/>
|
||||
<Action name="monitor_play_zone" shortcut="Ctrl+Space"/>
|
||||
<Action name="monitor_loop_zone" shortcut="Alt+Space"/>
|
||||
<Action name="switch_monitor" shortcut="T"/>
|
||||
<Action name="insert_project_tree" shortcut="Ctrl+I"/>
|
||||
<Action name="monitor_seek_snap_backward" shortcut="Alt+Left"/>
|
||||
<Action name="monitor_seek_guide_backward" shortcut="Ctrl+Left"/>
|
||||
<Action name="seek_clip_start" shortcut="Home"/>
|
||||
<Action name="seek_clip_end" shortcut="End"/>
|
||||
<Action name="monitor_seek_snap_forward" shortcut="Alt+Right"/>
|
||||
<Action name="monitor_seek_guide_forward" shortcut="Ctrl+Right"/>
|
||||
<Action name="align_playhead" shortcut="P"/>
|
||||
<Action name="grab_item" shortcut="Shift+G"/>
|
||||
<Action name="overwrite_to_in_point" shortcut="B"/>
|
||||
<Action name="remove_extract" shortcut="Shift+X"/>
|
||||
<Action name="remove_lift" shortcut="Z"/>
|
||||
<Action name="prerender_timeline_zone" shortcut="Return"/>
|
||||
<Action name="select_timeline_clip" shortcut="+"/>
|
||||
<Action name="select_add_timeline_clip" shortcut="Alt++"/>
|
||||
<Action name="select_timeline_transition" shortcut="Shift++"/>
|
||||
<Action name="deselect_timeline_transition" shortcut="Shift+-"/>
|
||||
<Action name="add_marker_guide_quickly" shortcut="M"/>
|
||||
<Action name="edit_item_speed" shortcut="Ctrl+R"/>
|
||||
<Action name="cut_timeline_clip" shortcut="Ctrl+K"/>
|
||||
<Action name="delete_timeline_clip" shortcut="Del"/>
|
||||
<Action name="resize_timeline_clip_start" shortcut="Q"/>
|
||||
<Action name="resize_timeline_clip_end" shortcut="W"/>
|
||||
<Action name="paste_effects" shortcut="Ctrl+Shift+V"/>
|
||||
<Action name="group_clip" shortcut="Ctrl+G"/>
|
||||
<Action name="ungroup_clip" shortcut="Ctrl+Shift+G"/>
|
||||
<Action name="edit_copy" shortcut="Ctrl+C; Ctrl+Ins"/>
|
||||
<Action name="edit_paste" shortcut="Ctrl+V; Shift+Ins"/>
|
||||
<Action name="select_all_tracks" shortcut="Ctrl+A"/>
|
||||
<Action name="unselect_all_tracks" shortcut="Ctrl+Shift+A"/>
|
||||
<Action name="add_guide" shortcut="G"/>
|
||||
<Action name="file_save" shortcut="Ctrl+S"/>
|
||||
<Action name="options_show_menubar" shortcut="Ctrl+M"/>
|
||||
<Action name="file_quit" shortcut="Ctrl+Q"/>
|
||||
<Action name="options_configure" shortcut="Ctrl+Shift+,"/>
|
||||
<Action name="fullscreen" shortcut="Ctrl+Shift+F"/>
|
||||
<Action name="edit_undo" shortcut="Ctrl+Z"/>
|
||||
<Action name="edit_redo" shortcut="Ctrl+Shift+Z"/>
|
||||
<Action name="switch_track_lock" shortcut="Shift+L"/>
|
||||
<Action name="switch_all_track_lock" shortcut="Ctrl+Shift+L"/>
|
||||
<Action name="switch_track_target" shortcut="Shift+T"/>
|
||||
<Action name="switch_all_targets" shortcut="Shift+A"/>
|
||||
<Action name="activate_all_targets" shortcut="Alt+Shift+A"/>
|
||||
<Action name="add_text_clip" shortcut="Ctrl+T"/>
|
||||
<Action name="renamefile" shortcut="F2"/>
|
||||
<Action name="go_up" shortcut="Alt+Up"/>
|
||||
<Action name="help_contents" shortcut="F1"/>
|
||||
<Action name="help_whats_this" shortcut="Shift+F1"/>
|
||||
</ActionProperties>
|
||||
</gui>
|
||||
@@ -12,4 +12,8 @@
|
||||
<parameter type="bool" name="progressive" default="1" min="0" max="1">
|
||||
<name>Force Progressive Rendering</name>
|
||||
</parameter>
|
||||
<parameter type="list" name="luma" default="" paramlist="%lumaPaths" optional="1">
|
||||
<paramlistdisplay>%lumaNames</paramlistdisplay>
|
||||
<name>Composite Method</name>
|
||||
</parameter>
|
||||
</transition>
|
||||
|
||||
@@ -1,4 +1,14 @@
|
||||
<!DOCTYPE kpartgui>
|
||||
<transition tag="luma" id="luma" type="hidden">
|
||||
<name>Luma</name>
|
||||
<description>Applies a stationary transition between the current and next frames.</description>
|
||||
<author>Dan Dennedy</author>
|
||||
<parameter type="list" name="resource" default="" paramlist="%lumaPaths" optional="1">
|
||||
<paramlistdisplay>%lumaNames</paramlistdisplay>
|
||||
<name>Wipe Method</name>
|
||||
</parameter>
|
||||
<parameter type="double" name="softness" max="100" min="0" default="0" factor="100">
|
||||
<name>Softness</name>
|
||||
</parameter>
|
||||
</transition>
|
||||
|
||||
|
||||
56
dev-docs/architecture.md
Normal file
@@ -0,0 +1,56 @@
|
||||
# Architecture
|
||||
|
||||
*This document describes Kdenlive’s architecture top-down.*
|
||||
|
||||
* Top-down architecture
|
||||
* Dependencies MLT etc.
|
||||
* MVC
|
||||
* GUI elements and their counterpart
|
||||
|
||||
|
||||
## Architectural Overview
|
||||
|
||||
Kdenlive uses a number of libraries. The most important library is MLT which is
|
||||
responsible for the core video editing functionality: the process of applying
|
||||
effects to clips which are organised in tracks and timeline(s). Kdenlive
|
||||
provides the user interface for this functionality.
|
||||
|
||||
Kdenlive and MLT use a number of resources like frei0r for video effects.
|
||||
|
||||
```
|
||||
┌────────┐
|
||||
│Kdenlive├─────┐
|
||||
└────┬───┘ │
|
||||
Render projects│ │Configure
|
||||
Decode audio/video│ │effect settings
|
||||
│ │
|
||||
┌────┴───┐ │
|
||||
│ MLT ├─────┤
|
||||
└────────┘ │Audio/Video Effects
|
||||
├───────┬──────┬─────────┐
|
||||
┌──┴───┐┌──┴───┐┌─┴─┐┌──────┴──────┐
|
||||
│frei0r││LADSPA││SoX││libsamplerate│
|
||||
└──────┘└──────┘└───┘└─────────────┘
|
||||
```
|
||||
<!-- http://marklodato.github.io/js-boxdrawing/ for drawing -->
|
||||
|
||||
|
||||
## Class Diagram
|
||||
|
||||
A class diagram can be generated with Doxygen and GraphViz with the commands
|
||||
below. Instead of docker, you can also run `doxygen` directly.
|
||||
|
||||
```bash
|
||||
# Generate a Doxyfile (configuration file)
|
||||
docker run -it --rm -v $(pwd):/data hrektts/doxygen doxygen -g
|
||||
|
||||
# Now edit the file and set the following variables:
|
||||
# EXTRACT_ALL = YES
|
||||
# HAVE_DOT = YES
|
||||
# UML_LOOK = YES
|
||||
# RECURSIVE = YES
|
||||
# INPUT = src
|
||||
|
||||
# Now run Doxygen to generate the docs and UML files
|
||||
docker run -it --rm -v $(pwd):/data hrektts/doxygen doxygen Doxyfile
|
||||
```
|
||||
160
dev-docs/build.md
Normal file
@@ -0,0 +1,160 @@
|
||||
# Building Kdenlive
|
||||
|
||||
## Base procedure
|
||||
|
||||
Kdenlive usually requires the latest version of MLT, in which go several API updates, bufixes and optimizations.
|
||||
|
||||
### Get the build dependencies
|
||||
|
||||
You can use your distribution packages information (if not too old) to easily get a complete build environment:
|
||||
|
||||
```bash
|
||||
# Debian/Ubuntu -- Enable deb-src entries /etc/apt/sources beforehand
|
||||
sudo apt build-dep mlt kdenlive
|
||||
# Fedora/CentOS -- Install builddep beforehand
|
||||
dnf builddep mlt kdenlive
|
||||
# OpenSUSE
|
||||
zypper source-install --build-deps-only mlt kdenlive
|
||||
```
|
||||
|
||||
### Clone the repositories
|
||||
|
||||
In your development directory, run:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/mltframework/mlt.git
|
||||
git clone https://invent.kde.org/multimedia/kdenlive.git
|
||||
```
|
||||
|
||||
### Build and install the projects
|
||||
|
||||
You should decide where you want to install your builds:
|
||||
|
||||
- by default it goes to `/usr/local` (good option if you are admin of the machine, normally programs there are automatically detected);
|
||||
- you may use `$HOME/.local` user-writable directory (good option if you don't want to play with admin rights, programs there are also usually found)
|
||||
- you may want to override the distribution files in `/usr` (then you have to remove MLT & Kdenlive binary & data packages first)
|
||||
- you can pick any destination you like (eg in `/opt` or anywhere in `$HOME`, then you will have to set several environment variables for programs, libs and data to be found)
|
||||
|
||||
Let's define that destination as `INSTALL_PREFIX` variable; also you can set `JOBS` variable to the number of threads your CPU can offer for builds.
|
||||
|
||||
And build the dependencies (MLT) before the project (Kdenlive):
|
||||
|
||||
```bash
|
||||
INSTALL_PREFIX=$HOME/.local # or any other choice
|
||||
JOBS=4
|
||||
|
||||
# MLT
|
||||
cd mlt
|
||||
./configure --enable-gpl --enable-gpl3 --prefix=$INSTALL_PREFIX
|
||||
make -j$JOBS
|
||||
make install
|
||||
# 'sudo make install' if INSTALL_PREFIX is not user-writable
|
||||
|
||||
# Kdenlive
|
||||
cd ../kdenlive
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX
|
||||
make -j$JOBS
|
||||
make install
|
||||
# 'sudo make install' if INSTALL_PREFIX is not user-writable
|
||||
```
|
||||
|
||||
Note that `make install` is required for Kdenlive, otherwise the effects will not be installed and cannot be used.
|
||||
|
||||
### Run Kdenlive
|
||||
|
||||
If you didn't build in a system path in which all libs and data are automatically found, you will need to set environment variables to point to them.
|
||||
This is done by the auto-generated script in `kdenlive/build` that must be sourced (to keep variables set in current shell, unlike just executing the script):
|
||||
|
||||
```bash
|
||||
. prefix.sh
|
||||
kdenlive
|
||||
```
|
||||
|
||||
## Various development tricks
|
||||
|
||||
### Debugging
|
||||
|
||||
Having debug symbols helps getting much more useful information from crash logs or analyzers outputs; this is enabled at configure stage.
|
||||
- in MLT, append `--enable-debug` to `./configure` line
|
||||
- in Kdenlive, append `-DCMAKE_BUILD_TYPE=Debug` to `cmake` line
|
||||
|
||||
### Running tests
|
||||
|
||||
Kdenlive test coverage is focused mostly on timeline model code (extending tests to more parts is highly desired). To run those tests, append to `cmake` line:
|
||||
`-DBUILD_TESTING=ON`
|
||||
|
||||
### Fuzzer
|
||||
|
||||
Kdenlive embeds a fuzzing engine that can detect crashes and auto-generate tests. This can be activated in `cmake` line with:
|
||||
`-DBUILD_FUZZING=ON`
|
||||
|
||||
### Speeding up compilations
|
||||
|
||||
Ninja build systems, compared to make, seems faster and better detecting which files are necessary to rebuild. You can enable it appending `-GNinja` to `cmake` line
|
||||
CCache also helps: `-DCMAKE_CXX_COMPILER_LAUNCHER=ccache`
|
||||
|
||||
### Analyzers
|
||||
|
||||
You can configure Kdenlive to embed tooling for runtime analysis, for example appending to cmake line:
|
||||
`-DCMAKE_CXX_COMPILER=/usr/bin/clang++ -DECM_ENABLE_SANITIZERS='address'`
|
||||
|
||||
This one will report in terminal all memory handling errors found during execution.
|
||||
|
||||
### Building OpenCV tracking module
|
||||
|
||||
MLT/Kdenlive tracking effect relies on a "contrib" a OpenCV module that is not shipped by distributions.
|
||||
We build it in our AppImage but you may want it on your system (note OpenCV deserves its reputation of being difficult to build!).
|
||||
|
||||
```bash
|
||||
wget https://github.com/opencv/opencv/archive/4.3.0.tar.gz -O opencv-4.3.0.tar.gz
|
||||
wget https://github.com/opencv/opencv_contrib/archive/4.3.0.tar.gz -O opencv_contrib-4.3.0.tar.gz
|
||||
tar xaf opencv-4.3.0.tar.gz
|
||||
tar xaf opencv_contrib-4.3.0.tar.gz
|
||||
cd opencv-4.3.0
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \
|
||||
-DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.3.0/modules \
|
||||
-DOPENCV_GENERATE_PKGCONFIG=ON -DBUILD_LIST=tracking -DOPENCV_BUILD_3RDPARTY_LIBS=OFF
|
||||
```
|
||||
|
||||
Then you will have to rebuild MLT appending `--enable-opencv` to `configure` line!
|
||||
|
||||
### Building frei0r
|
||||
|
||||
You may be interested in building latest frei0r effects library. So get dependencies, clone repository, and build-install:
|
||||
|
||||
```bash
|
||||
sudo apt build-dep frei0r
|
||||
git clone https://github.com/dyne/frei0r.git
|
||||
cd frei0r
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DWITHOUT_OPENCV=true -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX
|
||||
```
|
||||
|
||||
Note: as of 20.04, frei0r doesn't support recent OpenCV (and effects using it seemed not very stable)
|
||||
|
||||
### Building in Docker
|
||||
|
||||
It is possible to run the above commands inside a container, with a fresh Ubuntu for example.
|
||||
Note that Kdenlive cannot be easily run from inside the Docker container as it is a GUI application.
|
||||
|
||||
```bash
|
||||
# Spin up a Docker container
|
||||
# The --rm flag removes the container after it is stopped.
|
||||
docker run -it --rm ubuntu:20.04
|
||||
|
||||
# Now install the dependencies etc.
|
||||
# Note that you are root in the container, and sudo neither exists nor works.
|
||||
apt install …
|
||||
|
||||
# When you are done, exit
|
||||
exit
|
||||
```
|
||||
|
||||
## Translating Kdenlive
|
||||
|
||||
TODO
|
||||
63
dev-docs/coding.md
Normal file
@@ -0,0 +1,63 @@
|
||||
# Coding and Resources
|
||||
|
||||
* Qt5
|
||||
* [All Qt5 classes][qt5c]
|
||||
* [Signals and Slots][qt-sig]
|
||||
* [MLT introduction][mlt-intro].
|
||||
* [The KDE Frameworks][kf]
|
||||
* [XMLGUI Technology][xmlgui-tut] (e.g. for the `kdenliveui.rc` file)
|
||||
|
||||
|
||||
## Locale handling
|
||||
|
||||
Locales are important e.g. for formatting numbers in a way that the user is
|
||||
familiar with. Some countries would write `12500.42` as `12.000,42`, for
|
||||
example.
|
||||
|
||||
Since 20.08, Kdenlive follows the following rules:
|
||||
|
||||
* When parsing data (by Kdenlive or by other libraries like MLT), **the `C`
|
||||
locale is used.** This is especially important for project files. The reason
|
||||
is that for passing data between programs, the format has to be well-defined
|
||||
and *not* depend on where the user happens to live.
|
||||
* When presenting data to the user, the user’s locale is used.
|
||||
|
||||
MLT uses the C locale which is set by `setlocale()` and which must be set to
|
||||
`C`. If it is set to e.g. `hu_HU.utf-8`, which uses `,` as decimal separator,
|
||||
properties are converted to this format upon saving the project file, and the
|
||||
project file ends up corrupted.
|
||||
|
||||
In Kdenlive, `QLocale` should only be used in one case: when data is shown to
|
||||
the user or read from the user. Usually that is handled by Qt already. A
|
||||
`QDoubleSpinBox`, for example, presents the double value in the user’s local
|
||||
number format.
|
||||
|
||||
|
||||
## Configuration
|
||||
|
||||
Named settings are stored in [`kdenlivesettings.kcfg`][sett]. To add a new
|
||||
setting with default value, add an entry in the settings file, for example:
|
||||
|
||||
```xml
|
||||
<entry name="logscale" type="Bool">
|
||||
<label>Use logarithmic scale</label>
|
||||
<default>true</default>
|
||||
</entry>
|
||||
```
|
||||
|
||||
The setting can then be read and written as follows:
|
||||
|
||||
```cpp
|
||||
// Read
|
||||
bool logScale = KdenliveSettings::logscale();
|
||||
|
||||
// Write
|
||||
KdenliveSettings::setLogscale(true);
|
||||
```
|
||||
|
||||
[sett]: ../src/kdenlivesettings.kcfg
|
||||
[mlt-intro]: https://www.mltframework.org/docs/framework/
|
||||
[qt5c]: https://doc.qt.io/qt-5/classes.html
|
||||
[qt-sig]: https://doc.qt.io/qt-5/signalsandslots.html
|
||||
[kf]: https://api.kde.org/frameworks-api/frameworks-apidocs/frameworks/index.html
|
||||
[xmlgui-tut]: https://techbase.kde.org/Development/Architecture/KDE4/XMLGUI_Technology
|
||||
35
dev-docs/contributing.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# Contributing to Kdenlive
|
||||
|
||||
* Create a merge request on GitLab
|
||||
* Get it reviewed
|
||||
* Join the Telegram group
|
||||
|
||||
|
||||
## Coding Guidelines
|
||||
|
||||
* Use existing code style
|
||||
* Write unit tests
|
||||
* Document unclear parts (e.g. what a QMutex is locking)
|
||||
|
||||
|
||||
## Release + Branching Model
|
||||
|
||||
Kdenlive is following the [KDE Release Schedule][sched] and a new major version
|
||||
like `20.04` is released every four months. Bugfix releases like `20.04.1` are
|
||||
released until the next major release arrives.
|
||||
|
||||
The branching model in Git works as follows:
|
||||
|
||||
* `master` is the most recent development version.
|
||||
* `release/*` contains release branches like `release/20.04`. Shortly before a
|
||||
new major version is released, the new release branch is created and we enter
|
||||
feature and string freeze for final bugfixes and translation of texts. The
|
||||
version which is effectively released is marked with a tag.
|
||||
* `feature/*` contains feature branches. When you start coding a new feature,
|
||||
do it on a feature branch. When it is ready, the feature branch is merged
|
||||
back into master if the merge request has been approved.
|
||||
|
||||
Bugfixes for the released versions are added on the release branch and then
|
||||
merged back to master.
|
||||
|
||||
[sched]: https://community.kde.org/Schedules
|
||||
4
dev-docs/index.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# Kdenlive Developer Docs
|
||||
|
||||
* Overview what these docs are
|
||||
* Where to find more documentation (e.g. on MLT)
|
||||
@@ -1,32 +1,8 @@
|
||||
############################
|
||||
# fuzzing
|
||||
########################
|
||||
|
||||
if(POLICY CMP0079)
|
||||
cmake_policy(SET CMP0079 NEW)
|
||||
endif()
|
||||
|
||||
project(Kdenlive_fuzzing)
|
||||
|
||||
SET(FUZZING_CXX_FLAGS "${DEFAULT_CXX_FLAGS} -Wall -pedantic -Wextra -fexceptions -O1 -fsanitize=fuzzer,address -g")
|
||||
|
||||
|
||||
|
||||
SET(fuzzing_SRCS
|
||||
main_fuzzer.cpp
|
||||
fuzzing.cpp
|
||||
)
|
||||
SET(reproduce_SRCS
|
||||
main_reproducer.cpp
|
||||
fuzzing.cpp
|
||||
)
|
||||
|
||||
ADD_EXECUTABLE(fuzz ${fuzzing_SRCS})
|
||||
ADD_EXECUTABLE(fuzz_reproduce ${reproduce_SRCS})
|
||||
target_link_libraries(fuzz kdenliveLib)
|
||||
include_directories(${MLT_INCLUDE_DIR})
|
||||
kde_enable_exceptions()
|
||||
add_executable(fuzz main_fuzzer.cpp fuzzing.cpp)
|
||||
add_executable(fuzz_reproduce main_reproducer.cpp fuzzing.cpp)
|
||||
target_link_libraries(fuzz kdenliveLib -fsanitize=fuzzer)
|
||||
target_link_libraries(fuzz_reproduce kdenliveLib)
|
||||
#target_link_options(fuzz PUBLIC "-fsanitize=fuzzer")
|
||||
set_target_properties(fuzz PROPERTIES LINK_FLAGS "-fsanitize=fuzzer")
|
||||
set_property(TARGET fuzz PROPERTY CXX_STANDARD 14)
|
||||
set_property(TARGET fuzz_reproduce PROPERTY CXX_STANDARD 14)
|
||||
set_target_properties(fuzz PROPERTIES COMPILE_FLAGS "${FUZZING_CXX_FLAGS}")
|
||||
|
||||
6
packaging/appimage/3rdparty/CMakeLists.txt
vendored
@@ -96,11 +96,14 @@ add_subdirectory( ext_fftw3 )
|
||||
add_subdirectory( ext_fftw3f )
|
||||
add_subdirectory( ext_sdl2 )
|
||||
add_subdirectory( ext_sox )
|
||||
add_subdirectory( ext_jack )
|
||||
add_subdirectory( ext_jack )
|
||||
add_subdirectory( ext_ladspa )
|
||||
add_subdirectory( ext_x264 )
|
||||
add_subdirectory( ext_x265 )
|
||||
add_subdirectory( ext_libvpx )
|
||||
add_subdirectory( ext_nv-codec-headers )
|
||||
add_subdirectory( ext_amf )
|
||||
add_subdirectory( ext_mfx )
|
||||
add_subdirectory( ext_ffmpeg )
|
||||
add_subdirectory( ext_cairo )
|
||||
add_subdirectory( ext_pango )
|
||||
@@ -109,6 +112,7 @@ add_subdirectory( ext_gtk+ )
|
||||
add_subdirectory( ext_gavl )
|
||||
add_subdirectory( ext_frei0r )
|
||||
add_subdirectory( ext_opencv )
|
||||
add_subdirectory( ext_opus )
|
||||
add_subdirectory( ext_vidstab )
|
||||
add_subdirectory( ext_rubberband )
|
||||
add_subdirectory( ext_mlt )
|
||||
|
||||
13
packaging/appimage/3rdparty/ext_amf/CMakeLists.txt
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
ExternalProject_Add(
|
||||
|
||||
ext_amf
|
||||
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
GIT_REPOSITORY https://github.com/GPUOpen-LibrariesAndSDKs/AMF.git
|
||||
GIT_TAG master
|
||||
CONFIGURE_COMMAND rm -rf <SOURCE_DIR>/Thirdparty
|
||||
BUILD_ALWAYS TRUE
|
||||
BUILD_IN_SOURCE 1
|
||||
BUILD_COMMAND mkdir -p ${EXT_INSTALL_DIR}/include/AMF
|
||||
INSTALL_COMMAND cp -av <SOURCE_DIR>/amf/public/include/. ${EXT_INSTALL_DIR}/include/AMF
|
||||
)
|
||||
@@ -1,13 +1,13 @@
|
||||
ExternalProject_Add(
|
||||
ext_ffmpeg
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
GIT_REPOSITORY https://anonscm.debian.org/git/pkg-multimedia/ffmpeg.git
|
||||
# A stupid crlf issue prevents changing branch using normal pipeline, so
|
||||
# we have a crazy workaround to delete offending file and checkout the wanted branch
|
||||
UPDATE_COMMAND git checkout debian/7%4.1-1
|
||||
PATCH_COMMAND rm <SOURCE_DIR>/tests/ref/fate/sub-scc
|
||||
ExternalProject_Add(
|
||||
ext_ffmpeg
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
GIT_REPOSITORY https://anonscm.debian.org/git/pkg-multimedia/ffmpeg.git
|
||||
# A stupid crlf issue prevents changing branch using normal pipeline, so
|
||||
# we have a crazy workaround to delete offending file and checkout the wanted branch
|
||||
UPDATE_COMMAND git checkout debian/7%4.3-3
|
||||
# PATCH_COMMAND rm <SOURCE_DIR>/tests/ref/fate/sub-scc
|
||||
GIT_TAG debian/master
|
||||
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${EXT_INSTALL_DIR} --extra-ldflags="-L${EXT_INSTALL_DIR}/lib -lstdc++ -lm -lrt -ldl" --extra-cflags="-I$EXT_INSTALL_DIR/include" --enable-shared --enable-avfilter --enable-gpl --enable-avresample --enable-libx265 --enable-libvpx --enable-libx264 --disable-doc
|
||||
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${EXT_INSTALL_DIR} --extra-ldflags="-L${EXT_INSTALL_DIR}/lib -lstdc++ -lm -lrt -ldl" --extra-cflags="-I$EXT_INSTALL_DIR/include" --enable-shared --enable-avfilter --enable-gpl --enable-avresample --enable-libx265 --enable-libvpx --enable-libx264 --disable-doc --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-nvenc --enable-libmfx --enable-vaapi
|
||||
BUILD_ALWAYS TRUE
|
||||
BUILD_IN_SOURCE 1
|
||||
BUILD_COMMAND $(MAKE) clean
|
||||
|
||||
@@ -1,440 +1,273 @@
|
||||
# All needed frameworks:
|
||||
# Tier 1
|
||||
# Archive
|
||||
# Codecs
|
||||
# Config
|
||||
# CoreAddons
|
||||
# DBusAddons
|
||||
# GuiAddons
|
||||
# I18n
|
||||
# ItemModels
|
||||
# ItemViews
|
||||
# WidgetsAddons
|
||||
# WindowSystem
|
||||
# Solid
|
||||
# Sonnet
|
||||
# SyntaxHighlighting
|
||||
# Tier 2
|
||||
# Activities
|
||||
# Auth
|
||||
# Completion
|
||||
# Crash
|
||||
# JobWidgets
|
||||
# Notifications
|
||||
# Package
|
||||
# Tier 3
|
||||
# Emoticons
|
||||
# ConfigWidgets
|
||||
# IconThemes
|
||||
# Service
|
||||
# TextWidgets
|
||||
# XmlGui
|
||||
# Bookmarks
|
||||
# GlobalAccel
|
||||
# KIO
|
||||
# Declarative
|
||||
# KCMUtils
|
||||
# Wallet
|
||||
# Script to build KF5 Frameworks for digiKam bundle.
|
||||
#
|
||||
# Copyright (c) 2015-2020 by 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.
|
||||
#
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_extra_cmake_modules
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/extra-cmake-modules-5.61.0.zip
|
||||
URL_MD5 e63d81fc203c03667cc9043395c1e80d
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
)
|
||||
set(EXTPREFIX_frameworks "${EXTPREFIX}")
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_karchive
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/karchive-5.61.0.zip
|
||||
URL_MD5 24f9b0c849943e9a7cdee48facaf62ce
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_extra_cmake_modules
|
||||
)
|
||||
function(InstallKF5Component
|
||||
name
|
||||
version
|
||||
argoptions
|
||||
patch)
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kcodecs
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kcodecs-5.61.0.zip
|
||||
URL_MD5 6c2615ec49c224adea10785e50cb21c5
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_extra_cmake_modules
|
||||
)
|
||||
if(MINGW)
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kconfig
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kconfig-5.61.0.zip
|
||||
URL_MD5 0fedc596e49c82647853710582eb9138
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_extra_cmake_modules
|
||||
)
|
||||
# Extract MD5 sums of each KF5 components directly from server.
|
||||
execute_process(COMMAND
|
||||
wget -q -O - -o /dev/null http://download.kde.org/stable/frameworks/${version}/${name}-${version}.0.tar.xz.mirrorlist
|
||||
COMMAND
|
||||
grep "MD5 Hash"
|
||||
COMMAND
|
||||
grep -o -P "(?<=<tt>).*(?=</tt>)"
|
||||
RESULT_VARIABLE
|
||||
wgetresult
|
||||
OUTPUT_VARIABLE
|
||||
md5sm
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kdbusaddons
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kdbusaddons-5.61.0.zip
|
||||
URL_MD5 837514e0b634916221cbfa5705cb1aca
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_extra_cmake_modules
|
||||
)
|
||||
if(NOT ${wgetresult} MATCHES 0)
|
||||
message(WARNING "Cannot download MD5 sum for ${name}!")
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kcoreaddons
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kcoreaddons-5.61.0.zip
|
||||
URL_MD5 62e72d0e2cb1a24de6b10eebea43fe48
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_sharedmimeinfo ext_extra_cmake_modules
|
||||
)
|
||||
message(STATUS "--------------------------------")
|
||||
message(STATUS "KF5 component : ${name}")
|
||||
message(STATUS "Component version: ${version}")
|
||||
message(STATUS "Component MD5 : ${md5sm}")
|
||||
message(STATUS "Configure options: ${argoptions}")
|
||||
message(STATUS "Patch to apply : ${patch}")
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kguiaddons
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kguiaddons-5.61.0.zip
|
||||
URL_MD5 0236f2bb13b692362b0d875baa06e8ac
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_extra_cmake_modules
|
||||
)
|
||||
if(NOT "${patch}" STREQUAL "")
|
||||
set(patch "${PATCH_COMMAND};-p1;-i;${CMAKE_CURRENT_SOURCE_DIR}/${patch}")
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_ki18n
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/ki18n-5.61.0.zip
|
||||
URL_MD5 2ce768761b8b1e1d2f52cbea143884ce
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_extra_cmake_modules ext_gettext
|
||||
)
|
||||
ExternalProject_Add(ext_${name}
|
||||
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
|
||||
URL file://${EXTERNALS_DOWNLOAD_DIR}/${name}-${version}.0.tar.xz
|
||||
URL_MD5 ${md5sm}
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kitemmodels
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kitemmodels-5.61.0.zip
|
||||
URL_MD5 32866b0c6b0313cc82f11cf99d3c4d2b
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_extra_cmake_modules
|
||||
)
|
||||
INSTALL_DIR ${EXTPREFIX_frameworks}
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kitemviews
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kitemviews-5.61.0.zip
|
||||
URL_MD5 4f5f2b12e29eb7d810f984d45a9c5964
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_extra_cmake_modules
|
||||
)
|
||||
CMAKE_ARGS -DMXE_TOOLCHAIN=${MXE_TOOLCHAIN}
|
||||
-DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE}
|
||||
-DCMAKE_COLOR_MAKEFILE=ON
|
||||
-DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks}
|
||||
-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MXE_TOOLCHAIN}
|
||||
-DCMAKE_FIND_PREFIX_PATH=${CMAKE_PREFIX_PATH}
|
||||
-DCMAKE_SYSTEM_INCLUDE_PATH=${CMAKE_PREFIX_PATH}/include
|
||||
-DCMAKE_INCLUDE_PATH=${CMAKE_PREFIX_PATH}/include
|
||||
-DCMAKE_LIBRARY_PATH=${CMAKE_PREFIX_PATH}/lib
|
||||
-DBUILD_TESTING=OFF
|
||||
-DZLIB_ROOT=${CMAKE_PREFIX_PATH}
|
||||
-DINSTALL_ROOT=${MXE_INSTALL_PREFIX}
|
||||
${GLOBAL_PROFILE}
|
||||
"${argoptions}"
|
||||
-Wno-dev
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kwidgetsaddons
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kwidgetsaddons-5.61.0.zip
|
||||
URL_MD5 50bf68ff09fe30d61b2756ff2a3b9818
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_extra_cmake_modules
|
||||
)
|
||||
PATCH_COMMAND ${patch}
|
||||
UPDATE_COMMAND ""
|
||||
ALWAYS 0
|
||||
)
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kwindowsystem
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kwindowsystem-5.61.0.zip
|
||||
URL_MD5 9e2d29a266ca085487038403e1514bbc
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_extra_cmake_modules
|
||||
)
|
||||
ExternalProject_Add_step(ext_${name} before_download
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_solid
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/solid-5.61.0.zip
|
||||
URL_MD5 0a842b1c78c9482d719c07e37ae7f333
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_extra_cmake_modules
|
||||
)
|
||||
# Note : under MXE, curl is not compiled with https support. We cannot use the tarball as under Linux/MacOS.
|
||||
COMMAND wget -N http://download.kde.org/stable/frameworks/${version}/${name}-${version}.0.tar.xz -O ${EXTERNALS_DOWNLOAD_DIR}/${name}-${version}.0.tar.xz
|
||||
DEPENDERS download
|
||||
)
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_sonnet
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/sonnet-5.61.0.zip
|
||||
URL_MD5 185c918e14898f1815a4d1fe62db83d7
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_extra_cmake_modules
|
||||
)
|
||||
elseif(APPLE)
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_syntaxhighlighting
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/syntax-highlighting-5.61.0.zip
|
||||
URL_MD5 f31399bd41691f015b2b61373719b96a
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_extra_cmake_modules
|
||||
)
|
||||
# Extract MD5 sums of each KF5 components directly from server.
|
||||
execute_process(COMMAND
|
||||
wget -q -O - -o /dev/null http://download.kde.org/stable/frameworks/${version}/${name}-${version}.0.tar.xz.mirrorlist
|
||||
COMMAND
|
||||
grep "MD5 Hash"
|
||||
COMMAND
|
||||
grep -o "<tt>.*</tt>"
|
||||
COMMAND
|
||||
cut -c 5-
|
||||
COMMAND
|
||||
rev
|
||||
COMMAND
|
||||
cut -c 6-
|
||||
COMMAND
|
||||
rev
|
||||
RESULT_VARIABLE
|
||||
wgetresult
|
||||
OUTPUT_VARIABLE
|
||||
md5sm
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kholidays
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL https://download.kde.org/stable/frameworks/5.61/kholidays-5.61.0.zip
|
||||
URL_MD5 fdd9193fcd666a76d9d1d63470a2aeba
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_extra_cmake_modules
|
||||
)
|
||||
if(NOT ${wgetresult} MATCHES 0)
|
||||
message(WARNING "Cannot download MD5 sum for ${name}!")
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kactivities
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kactivities-5.61.0.zip
|
||||
URL_MD5 582e7738a8a7c4dc736c4c561f2b90cd
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_boost ext_kconfig ext_kcoreaddons ext_kwindowsystem
|
||||
)
|
||||
message(STATUS "--------------------------------")
|
||||
message(STATUS "KF5 component : ${name}")
|
||||
message(STATUS "Component version: ${version}")
|
||||
message(STATUS "Component MD5 : ${md5sm}")
|
||||
message(STATUS "Configure options: ${argoptions}")
|
||||
message(STATUS "Patch to apply : ${patch}")
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kauth
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kauth-5.61.0.zip
|
||||
URL_MD5 2b098e9374d7bcc1ef640f2e98c944b4
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_kcoreaddons
|
||||
)
|
||||
if(NOT "${patch}" STREQUAL "")
|
||||
set(patch "${PATCH_COMMAND};-p1;-i;${CMAKE_CURRENT_SOURCE_DIR}/${patch};&&")
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kcompletion
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kcompletion-5.61.0.zip
|
||||
URL_MD5 9d3e10ccda7e988a60e59ab87eaa0e56
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_kwidgetsaddons ext_kconfig
|
||||
)
|
||||
ExternalProject_Add(ext_${name}
|
||||
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/${version}/${name}-${version}.0.tar.xz
|
||||
URL_MD5 ${md5sm}
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kcrash
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kcrash-5.61.0.zip
|
||||
URL_MD5 3e94cb696f2ae8ddda21b653d961d686
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_kcoreaddons ext_kwindowsystem
|
||||
)
|
||||
PATCH_COMMAND ${patch}
|
||||
cp ${CMAKE_CURRENT_SOURCE_DIR}/../../macports/fixbundledatapath.sh <SOURCE_DIR>/. &&
|
||||
<SOURCE_DIR>/fixbundledatapath.sh
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kjobwidgets
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kjobwidgets-5.61.0.zip
|
||||
URL_MD5 d1741558f0bdc7aee4eb00a63a7ad0bb
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_kcoreaddons ext_kwidgetsaddons
|
||||
)
|
||||
CONFIGURE_COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/../../../../bootstrap.macports <SOURCE_DIR>/. &&
|
||||
sed -i '' -e "s/DBUILD_TESTING=ON/DBUILD_TESTING=OFF/g" <SOURCE_DIR>/bootstrap.macports &&
|
||||
<SOURCE_DIR>/bootstrap.macports ${EXTPREFIX_frameworks} debug x86_64 "${argoptions}"
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_knotifications
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/knotifications-5.61.0.zip
|
||||
URL_MD5 ea46fbd930228511743d0793fd4aede9
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_kwindowsystem ext_kconfig ext_kcodecs ext_kcoreaddons ext_phonon
|
||||
)
|
||||
BUILD_COMMAND cd <SOURCE_DIR>/build && $(MAKE)
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_attica
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/attica-5.61.0.zip
|
||||
URL_MD5 50143e5c131a94fd383ed8fffc03f793
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_kwindowsystem ext_kconfig ext_kcodecs ext_kcoreaddons ext_phonon
|
||||
)
|
||||
INSTALL_COMMAND cd <SOURCE_DIR>/build && make install/fast
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kpackage
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kpackage-5.61.0.zip
|
||||
URL_MD5 a7c324a083a95bdbf48362995ed72b18
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_karchive ext_ki18n ext_kcoreaddons
|
||||
)
|
||||
BUILD_IN_SOURCE 1
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kconfigwidgets
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kconfigwidgets-5.61.0.zip
|
||||
URL_MD5 c65357e83034ac247405f03a61536da8
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_kauth ext_kcoreaddons ext_kcodecs ext_kconfig ext_kguiaddons ext_ki18n ext_kwidgetsaddons
|
||||
)
|
||||
UPDATE_COMMAND ""
|
||||
ALWAYS 0
|
||||
)
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kiconthemes
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kiconthemes-5.61.0.zip
|
||||
URL_MD5 bee44c7d4de4f6c44ea6f898d1447907
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_karchive ext_ki18n ext_kcoreaddons ext_kconfigwidgets ext_kwidgetsaddons ext_kitemviews
|
||||
)
|
||||
else() # Linux
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kservice
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kservice-5.61.0.zip
|
||||
URL_MD5 a89621b85f005519b6e8bb9dbcea6e81
|
||||
#PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/kservice.diff #this makes finding KCModules in AppImage possible
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_kconfig ext_kcoreaddons ext_kcrash ext_kdbusaddons ext_ki18n
|
||||
)
|
||||
# Extract MD5 sums of each KF5 components directly from server.
|
||||
execute_process(COMMAND
|
||||
wget -q -O - -o /dev/null http://download.kde.org/stable/frameworks/${version}/${name}-${version}.0.tar.xz.mirrorlist
|
||||
COMMAND
|
||||
grep "MD5 Hash"
|
||||
COMMAND
|
||||
grep -o -P "(?<=<tt>).*(?=</tt>)"
|
||||
RESULT_VARIABLE
|
||||
wgetresult
|
||||
OUTPUT_VARIABLE
|
||||
md5sm
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kemoticons
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kemoticons-5.61.0.zip
|
||||
URL_MD5 2ee202a4d8421d7e7e3a7ead0d0ac8cc
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_karchive ext_kconfig ext_kservice ext_kcoreaddons
|
||||
)
|
||||
if(NOT ${wgetresult} MATCHES 0)
|
||||
message(WARNING "Cannot download MD5 sum for ${name}!")
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_ktextwidgets
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/ktextwidgets-5.61.0.zip
|
||||
URL_MD5 d806865de5f32a50ce985f6b6e1d7fc2
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_extra_cmake_modules ext_kcompletion ext_kconfig ext_kconfigwidgets ext_ki18n ext_kiconthemes ext_kservice ext_kwidgetsaddons ext_kwindowsystem ext_sonnet
|
||||
)
|
||||
message(STATUS "--------------------------------")
|
||||
message(STATUS "KF5 component : ${name}")
|
||||
message(STATUS "Component version: ${version}")
|
||||
message(STATUS "Component MD5 : ${md5sm}")
|
||||
message(STATUS "Configure options: ${argoptions}")
|
||||
message(STATUS "Patch to apply : ${patch}")
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kglobalaccel
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kglobalaccel-5.61.0.zip
|
||||
URL_MD5 3da7c0e1fe47e92993ef275b0c7512a4
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_kconfig ext_kcoreaddons ext_kcrash ext_kdbusaddons ext_kwindowsystem
|
||||
)
|
||||
if(NOT "${patch}" STREQUAL "")
|
||||
set(patch "${PATCH_COMMAND};-p1;-i;${CMAKE_CURRENT_SOURCE_DIR}/${patch}")
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kxmlgui
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kxmlgui-5.61.0.zip
|
||||
URL_MD5 37a6bbc26dc1ebad278c0bc0a63c5af5
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_kcoreaddons ext_kitemviews ext_kconfig ext_kconfigwidgets ext_ki18n ext_kiconthemes ext_ktextwidgets ext_kwidgetsaddons ext_kwindowsystem ext_kglobalaccel
|
||||
)
|
||||
ExternalProject_Add(ext_${name}
|
||||
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/${version}/${name}-${version}.0.tar.xz
|
||||
URL_MD5 ${md5sm}
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kbookmarks
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kbookmarks-5.61.0.zip
|
||||
URL_MD5 3b067a8dbe4784ff3f229767f6e355db
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_kconfig ext_kcoreaddons ext_kcodecs ext_kconfigwidgets ext_kiconthemes ext_kwidgetsaddons ext_kxmlgui
|
||||
)
|
||||
PATCH_COMMAND ${patch}
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kwallet
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kwallet-5.61.0.zip
|
||||
URL_MD5 97f6af2b3c756a9b7c49967e744bac99
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_gcrypt ext_gpgme ext_kcoreaddons ext_kconfig ext_kwindowsystem ext_ki18n ext_kconfigwidgets ext_knotifications ext_kservice ext_kwidgetsaddons ext_kiconthemes ext_kdbusaddons
|
||||
)
|
||||
INSTALL_DIR ${EXTPREFIX_frameworks}
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
-DBUILD_TESTING=OFF
|
||||
"${argoptions}"
|
||||
-Wno-dev
|
||||
UPDATE_COMMAND ""
|
||||
ALWAYS 0
|
||||
)
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kio
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kio-5.61.0.zip
|
||||
URL_MD5 98f9cf494c281faae412991c5e99a94b
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_extra_cmake_modules ext_karchive ext_kconfig ext_kcoreaddons ext_kdbusaddons ext_ki18n ext_kservice ext_solid ext_kwindowsystem ext_kwidgetsaddons ext_kcompletion ext_kconfigwidgets ext_kiconthemes ext_kitemviews ext_kjobwidgets ext_kbookmarks ext_kwallet
|
||||
)
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_knewstuff
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/knewstuff-5.61.0.zip
|
||||
URL_MD5 fe4a4a674abb1588691fc76030109f81
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_kio ext_kwindowsystem ext_kconfig ext_kcodecs ext_kcoreaddons ext_phonon ext_attica
|
||||
)
|
||||
endfunction()
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_knotifyconfig
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/knotifyconfig-5.61.0.zip
|
||||
URL_MD5 c5ab95425c6864a2ccb1af784c0d2e84
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_kwindowsystem ext_kconfig ext_kcodecs ext_kcoreaddons ext_phonon ext_knewstuff
|
||||
)
|
||||
if(MINGW)
|
||||
set(KF5_VERSION 5.74) # we have Qt 5.14.2 available.
|
||||
elseif(APPLE)
|
||||
set(KF5_VERSION 5.74) # we have Qt 5.14.1 available.
|
||||
else()
|
||||
set(KF5_VERSION 5.74) # we have Qt 5.14.2 available.
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kdeclarative
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kdeclarative-5.61.0.zip
|
||||
URL_MD5 228c640eb598d59ff7ff031c84f1ace7
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_kconfig ext_ki18n ext_kiconthemes ext_kio ext_kwidgetsaddons ext_kwindowsystem ext_kglobalaccel ext_kguiaddons ext_kpackage
|
||||
)
|
||||
if(APPLE)
|
||||
set(MacosThreadWeaverPatch threadweaver-macports.patch)
|
||||
set(MacosKauthBackend -DKAUTH_BACKEND_NAME=Apple)
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kcmutils
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kcmutils-5.61.0.zip
|
||||
URL_MD5 4c41ec7dfd8656199ce83d13ef9ab72f
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_kitemviews ext_kconfigwidgets ext_kcoreaddons ext_ki18n ext_kiconthemes ext_kservice ext_kxmlgui ext_kdeclarative
|
||||
)
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kimageformats
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kimageformats-5.61.0.zip
|
||||
URL_MD5 fb09577e4eeb4971147cad6ab69c6d75
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_kitemviews
|
||||
)
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kpurpose
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/purpose-5.61.0.zip
|
||||
URL_MD5 32270091283bcab0452ccf79a76128c2
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_kxmlgui
|
||||
)
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kfilemetadata
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kfilemetadata-5.61.0.zip
|
||||
URL_MD5 95ccb70f3d00e1a203239076bad6bf63
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_kguiaddons
|
||||
)
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kdoctools
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/kdoctools-5.61.0.zip
|
||||
URL_MD5 c522e8c468fce403c5284e9c61e5b458
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_kcoreaddons
|
||||
)
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_breezeicons
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/frameworks/5.61/breeze-icons-5.61.0.zip
|
||||
URL_MD5 0c7199da9510bd8fd59fd6a6bc8b8c78
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
)
|
||||
InstallKF5Component(extra-cmake-modules ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(kconfig ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(breeze-icons ${KF5_VERSION} "-DBINARY_ICONS_RESOURCE=OFF" "${MacosBreezePatch}")
|
||||
InstallKF5Component(solid ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(kcoreaddons ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(threadweaver ${KF5_VERSION} "" "${MacosThreadWeaverPatch}")
|
||||
InstallKF5Component(kwindowsystem ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(karchive ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(kdbusaddons ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(ki18n ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(kcrash ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(kpackage ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(kcodecs ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(kauth ${KF5_VERSION} "${MacosKauthBackend}" "")
|
||||
InstallKF5Component(knewstuff ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(kguiaddons ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(kwidgetsaddons ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(kdeclarative ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(kitemviews ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(kcompletion ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(kconfigwidgets ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(kiconthemes ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(kservice ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(kglobalaccel ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(kxmlgui ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(kbookmarks ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(kdoctools ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(kimageformats ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(knotifyconfig ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(knotifications ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(kjobwidgets ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(sonnet ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(ktextwidgets ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(attica ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(kio ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(frameworkintegration ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(qqc2-desktop-style ${KF5_VERSION} "" "")
|
||||
InstallKF5Component(plasma-framework ${KF5_VERSION} "" "")
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_kdecoration
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/plasma/5.16.4/kdecoration-5.16.4.tar.xz
|
||||
URL_MD5 5e44ce8c340a2776d0c26c01e052de98
|
||||
URL http://download.kde.org/stable/plasma/5.19.5/kdecoration-5.19.5.tar.xz
|
||||
URL_MD5 3cc5be057c571dc20775ac52a6af2908
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
)
|
||||
|
||||
ExternalProject_Add(
|
||||
ext_breeze
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL http://download.kde.org/stable/plasma/5.16.4/breeze-5.16.4.tar.xz
|
||||
URL_MD5 b9669c56c282a3a99ad8b5c8ab9e28e7
|
||||
URL http://download.kde.org/stable/plasma/5.19.5/breeze-5.19.5.tar.xz
|
||||
URL_MD5 f664f181d10c4cbbe4b385068c75539a
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
DEPENDS ext_kdecoration
|
||||
)
|
||||
|
||||
#ExternalProject_Add(
|
||||
# ext_plasma-framework
|
||||
# DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
# URL http://download.kde.org/stable/frameworks/5.68/plasma-framework-5.68.0.zip
|
||||
# URL_MD5 dd2741b632ad0e7589e00ef39a605422
|
||||
# CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE}
|
||||
# DEPENDS ext_kactivities
|
||||
#)
|
||||
|
||||
14
packaging/appimage/3rdparty/ext_mfx/CMakeLists.txt
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
ExternalProject_Add(
|
||||
|
||||
ext_mfx
|
||||
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
GIT_REPOSITORY git://github.com/lu-zero/mfx_dispatch.git
|
||||
GIT_TAG master
|
||||
CONFIGURE_COMMAND autoreconf -fiv
|
||||
COMMAND ./configure --prefix=${EXT_INSTALL_DIR}
|
||||
BUILD_ALWAYS TRUE
|
||||
BUILD_IN_SOURCE 1
|
||||
BUILD_COMMAND $(MAKE)
|
||||
INSTALL_COMMAND $(MAKE) install
|
||||
)
|
||||
11
packaging/appimage/3rdparty/ext_nv-codec-headers/CMakeLists.txt
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
ExternalProject_Add(
|
||||
ext_nv-codec-headers
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
GIT_REPOSITORY git://github.com/FFmpeg/nv-codec-headers.git
|
||||
GIT_TAG master
|
||||
CONFIGURE_COMMAND sed -i s,/usr/local,${EXT_INSTALL_DIR}, <SOURCE_DIR>/Makefile
|
||||
BUILD_ALWAYS TRUE
|
||||
BUILD_IN_SOURCE 1
|
||||
BUILD_COMMAND $(MAKE)
|
||||
INSTALL_COMMAND $(MAKE) install
|
||||
)
|
||||
@@ -2,8 +2,8 @@
|
||||
ExternalProject_Add(
|
||||
ext_opencv_contrib
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL https://github.com/opencv/opencv_contrib/archive/4.1.0.tar.gz
|
||||
URL_MD5 5357a038f54ba15c771abb0d91a5519d
|
||||
URL https://github.com/opencv/opencv_contrib/archive/4.3.0.tar.gz
|
||||
URL_MD5 924ed270a66b5234442cf84da8c7e4b1
|
||||
|
||||
# This is a support repository for OpenCV 4.x and does not contain any
|
||||
# build or install rules. This will be hooked into OpenCV which will control
|
||||
@@ -17,8 +17,8 @@ ExternalProject_Add(
|
||||
ExternalProject_Add(
|
||||
ext_opencv
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL https://github.com/opencv/opencv/archive/4.1.0.tar.gz
|
||||
URL_MD5 b80c59c7e4feee6a00608315e02b0b73
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE} -DOPENCV_EXTRA_MODULES_PATH=${EXT_BUILD_DIR}/deps-build/ext_opencv/ext_opencv_contrib-prefix/src/ext_opencv_contrib/modules -DOPENCV_GENERATE_PKGCONFIG=ON -DBUILD_opencv_freetype=OFF -DCPU_BASELINE=SSE4_2 -DCPU_DISPATCH=SSE4_2
|
||||
URL https://github.com/opencv/opencv/archive/4.3.0.tar.gz
|
||||
URL_MD5 559953ef6ffaad03421cbba7f31d891c
|
||||
CMAKE_ARGS ${CMAKE_GLOBAL_PROFILE} -DOPENCV_EXTRA_MODULES_PATH=${EXT_BUILD_DIR}/deps-build/ext_opencv/ext_opencv_contrib-prefix/src/ext_opencv_contrib/modules -DOPENCV_GENERATE_PKGCONFIG=ON -DBUILD_LIST=core,objdetect,imgproc,imgcodecs,flann,tracking -DBUILD_opencv_freetype=OFF -DBUILD_EXAMPLES=OFF -DBUILD_TESTS=OFF -DBUILD_DOCS=OFF -DBUILD_PERF_TESTS=OFF -DINSTALL_C_EXAMPLES=OFF -DINSTALL_PYTHON_EXAMPLES=OFF -DWITH_LAPACK=OFF -DWITH_V4L=OFF -DOPENCV_ENABLE_ALLOCATOR_STATS=OFF -DOPENCV_BUILD_3RDPARTY_LIBS=OFF -DBUILD_NEW_PYTHON_SUPPORT=OFF -DBUILD_ZLIB=OFF -DWITH_JASPER=OFF -DWITH_PNG=OFF -DWITH_OPENEXR=OFF -DWITH_1394=OFF -DWITH_CUBLAS=OFF -DWITH_CUDA=OFF -DWITH_CUFFT=OFF -DWITH_DIRECTX=OFF -DWITH_DSHOW=OFF -DWITH_EIGEN=OFF -DWITH_FFMPEG=OFF -DWITH_GPHOTO2=OFF -DWITH_GSTREAMER=OFF -DWITH_GTK=OFF -DWITH_IMGCODEC_HDR=OFF -DWITH_IMGCODEC_PXM=OFF -DWITH_IMGCODEC_SUNRASTER=OFF -DWITH_IPP=OFF -DWITH_JPEG=OFF -DWITH_MATLAB=OFF -DWITH_NVCUVID=OFF -DWITH_OPENCL_SVM=OFF -DWITH_OPENCL=OFF -DWITH_OPENCLAMDBLAS=OFF -DWITH_OPENCLAMDFFT=OFF -DWITH_OPENMP=OFF -DWITH_OPENNI=OFF -DWITH_PVAPI=OFF -DWITH_QT_OPENGL=OFF -DWITH_QT=OFF -DWITH_QUICKTIME=OFF -DWITH_TBB=OFF -DWITH_TIFF=OFF -DWITH_UNICAP=OFF -DWITH_VA_INTEL=OFF -DWITH_VFW=OFF -DWITH_VIDEOINPUT=OFF -DWITH_VTK=OFF -DWITH_WEBP=OFF -DWITH_WIN32UI=OFF -DWITH_XINE=OFF -DCPU_BASELINE=SSE2 -DCPU_DISPATCH=SSE2
|
||||
DEPENDS ext_opencv_contrib
|
||||
)
|
||||
|
||||
10
packaging/appimage/3rdparty/ext_opus/CMakeLists.txt
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
ExternalProject_Add(
|
||||
ext_opus
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL https://archive.mozilla.org/pub/opus/opus-1.3.1.tar.gz
|
||||
URL_MD5 d7c07db796d21c9cf1861e0c2b0c0617
|
||||
|
||||
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${EXT_INSTALL_DIR}
|
||||
BUILD_COMMAND $(MAKE)
|
||||
INSTALL_COMMAND $(MAKE) install
|
||||
)
|
||||
@@ -5,12 +5,12 @@
|
||||
ExternalProject_Add(
|
||||
ext_qt
|
||||
DOWNLOAD_DIR ${EXT_DOWNLOAD_DIR}
|
||||
URL https://download.qt.io/official_releases/qt/5.12/5.12.4/single/qt-everywhere-src-5.12.4.tar.xz
|
||||
URL_MD5 dda95b0239d13c5276834177af3a8588
|
||||
URL https://download.qt.io/official_releases/qt/5.14/5.14.1/single/qt-everywhere-src-5.14.1.tar.xz
|
||||
URL_MD5 781c3179410aff7ef84607214e1e91b4
|
||||
CMAKE_ARGS -DOPENSSL_LIBS='-L${EXTPREFIX_qt}/lib -lssl -lcrypto'
|
||||
BUILD_IN_SOURCE 1
|
||||
#PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/qsql_mysql.diff
|
||||
CONFIGURE_COMMAND <SOURCE_DIR>/configure -prefix ${EXT_INSTALL_DIR} -opensource -confirm-license -openssl-linked -verbose -nomake examples -nomake tests -nomake tools -skip qt3d -skip qtactiveqt -skip qtcanvas3d -skip qtconnectivity -skip qtlocation -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtandroidextras -skip qtserialport -skip qtdatavis3d -skip qtvirtualkeyboard -skip qtspeech -skip qtsensors -skip qtgamepad -skip qtscxml -skip qtremoteobjects -skip qtxmlpatterns -skip qtcharts -skip qtpurchasing -skip qtserialbus -skip qtdoc -skip qtmacextras -skip qtwinextras -skip qtwebglplugin -skip qtwebsockets -skip qtwebview -skip qtnetworkauth
|
||||
<EFBFBD> CONFIGURE_COMMAND <SOURCE_DIR>/configure -prefix ${EXT_INSTALL_DIR} -opensource -confirm-license -openssl-linked -verbose -nomake examples -nomake tests -nomake tools -skip qt3d -skip qtactiveqt -skip qtcanvas3d -skip qtconnectivity -skip qtlocation -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtandroidextras -skip qtserialport -skip qtdatavis3d -skip qtvirtualkeyboard -skip qtspeech -skip qtsensors -skip qtgamepad -skip qtscxml -skip qtremoteobjects -skip qtxmlpatterns -skip qtcharts -skip qtpurchasing -skip qtserialbus -skip qtdoc -skip qtmacextras -skip qtwinextras -skip qtwebglplugin -skip qtwebsockets -skip qtwebview -skip qtnetworkauth -linker gold
|
||||
|
||||
BUILD_COMMAND $(MAKE)
|
||||
INSTALL_COMMAND $(MAKE) install
|
||||
|
||||
@@ -6,18 +6,25 @@ set -e
|
||||
# Be verbose
|
||||
set -x
|
||||
|
||||
# Make sure the base dependencies are installed
|
||||
#apt-get -y install build-essential perl python git '^libxcb.*-dev' libx11-xcb-dev \
|
||||
# libglu1-mesa-dev libxrender-dev libxi-dev flex bison gperf libicu-dev ruby
|
||||
#apt-get -y install cmake3 wget tar bzip2 xz-utils libtool libfile-which-perl automake gcc-4.8 patch \
|
||||
# g++-4.8 zlib1g-dev libglib2.0-dev libc6-dev libeigen3-dev libssl-dev \
|
||||
# libcppunit-dev libstdc++-4.8-dev libfreetype6-dev libfontconfig1-dev liblcms2-dev \
|
||||
# mesa-common-dev libaio-dev lzma liblzma-dev\
|
||||
# libpulse-dev libsox-dev liblist-moreutils-perl libxml-parser-perl \
|
||||
# libjack-dev autopoint language-pack-en-base
|
||||
#apt-get update && apt-get install -y apt-transport-https ca-certificates gnupg software-properties-common wget
|
||||
#wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | apt-key add -
|
||||
#add-apt-repository -y ppa:openjdk-r/ppa && apt-add-repository 'deb https://apt.kitware.com/ubuntu/ xenial main'
|
||||
|
||||
## Update the system and bring in our core operating requirements
|
||||
#apt-get update && apt-get upgrade -y && apt-get install -y openssh-server openjdk-8-jre-headless
|
||||
|
||||
## Some software demands a newer GCC because they're using C++14 stuff, which is just insane
|
||||
## We do this after the general system update to ensure it doesn't bring in any unnecessary updates
|
||||
#add-apt-repository -y ppa:ubuntu-toolchain-r/test && apt-get update
|
||||
|
||||
## Now install the general dependencies we need for builds
|
||||
#apt-get install -y build-essential cmake git-core locales automake gcc-6 g++-6 libxml-parser-perl libpq-dev libaio-dev bison gettext gperf libasound2-dev libatkmm-1.6-dev libbz2-dev libcairo-perl libcap-dev libcups2-dev libdbus-1-dev libdrm-dev libegl1-mesa-dev libfontconfig1-dev libfreetype6-dev libgcrypt11-dev libgl1-mesa-dev libglib-perl libgsl0-dev libgsl0-dev gstreamer1.0-alsa libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgtk2-perl libjpeg-dev libnss3-dev libpci-dev libpng12-dev libpulse-dev libssl-dev libgstreamer-plugins-good1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly libtiff5-dev libudev-dev libwebp-dev flex libmysqlclient-dev libx11-dev libxkbcommon-x11-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-util0-dev libxcb-res0-dev libxcb1-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxext-dev libxfixes-dev libxi-dev libxrandr-dev libxrender-dev libxss-dev libxtst-dev mesa-common-dev liblist-moreutils-perl libtool libpixman-1-dev subversion
|
||||
|
||||
#apt-get -y install libpixman-1-dev docbook-xml docbook-xsl libattr1-dev
|
||||
|
||||
## Required for vaapi gpu encoding
|
||||
#apt-get -y install libva-dev
|
||||
|
||||
# Read in our parameters
|
||||
export BUILD_PREFIX=$1
|
||||
export KDENLIVE_SOURCES=$2
|
||||
@@ -65,75 +72,118 @@ cd $BUILD_PREFIX/deps-build/
|
||||
# Configure the dependencies for building
|
||||
cmake $KDENLIVE_SOURCES/packaging/appimage/3rdparty -DCMAKE_INSTALL_PREFIX=$DEPS_INSTALL_PREFIX -DEXT_INSTALL_DIR=$DEPS_INSTALL_PREFIX -DEXT_DOWNLOAD_DIR=$DOWNLOADS_DIR -DEXT_BUILD_DIR=$BUILD_PREFIX
|
||||
|
||||
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"
|
||||
|
||||
# Now start building everything we need, in the appropriate order
|
||||
|
||||
cmake --build . --target ext_lzma
|
||||
cmake --build . --target ext_xml
|
||||
cmake --build . --target ext_gettext
|
||||
cmake --build . --target ext_xslt
|
||||
cmake --build . --target ext_png
|
||||
cmake --build . --target ext_lzma -j$CPU_CORES
|
||||
cmake --build . --target ext_xml -j$CPU_CORES
|
||||
cmake --build . --target ext_gettext -j$CPU_CORES
|
||||
cmake --build . --target ext_xslt -j$CPU_CORES
|
||||
cmake --build . --target ext_png -j$CPU_CORES
|
||||
|
||||
# cmake --build . --target ext_jpeg #this causes build failures in Qt 5.10
|
||||
|
||||
export CC=/usr/bin/gcc-6
|
||||
export CXX=/usr/bin/g++-6
|
||||
|
||||
cmake --build . --target ext_qt
|
||||
cmake --build . --target ext_boost
|
||||
cmake --build . --target ext_gpgme
|
||||
cmake --build . --target ext_frameworks
|
||||
cmake --build . --target ext_libsndfile
|
||||
cmake --build . --target ext_libsamplerate
|
||||
cmake --build . --target ext_nasm
|
||||
cmake --build . --target ext_yasm
|
||||
cmake --build . --target ext_alsa
|
||||
cmake --build . --target ext_sdl2
|
||||
cmake --build . --target ext_boost -j$CPU_CORES
|
||||
cmake --build . --target ext_gpgme -j$CPU_CORES
|
||||
cmake --build . --target ext_libsndfile -j$CPU_CORES
|
||||
cmake --build . --target ext_libsamplerate -j$CPU_CORES
|
||||
cmake --build . --target ext_nasm -j$CPU_CORES
|
||||
cmake --build . --target ext_yasm -j$CPU_CORES
|
||||
cmake --build . --target ext_alsa -j$CPU_CORES
|
||||
cmake --build . --target ext_sdl2 -j$CPU_CORES
|
||||
|
||||
cmake --build . --target ext_fftw3
|
||||
cmake --build . --target ext_fftw3f
|
||||
cmake --build . --target ext_fftw3 -j$CPU_CORES
|
||||
cmake --build . --target ext_fftw3f -j$CPU_CORES
|
||||
|
||||
# ladspa expects fft3w.pc pkgconfig files
|
||||
cp $DEPS_INSTALL_PREFIX/lib/pkgconfig/fftwf.pc $DEPS_INSTALL_PREFIX/lib/pkgconfig/fftw3f.pc
|
||||
cp $DEPS_INSTALL_PREFIX/lib/pkgconfig/fftw.pc $DEPS_INSTALL_PREFIX/lib/pkgconfig/fftw3.pc
|
||||
|
||||
cmake --build . --target ext_x264
|
||||
cmake --build . --target ext_x265
|
||||
cmake --build . --target ext_x264 -j$CPU_CORES
|
||||
cmake --build . --target ext_x265 -j$CPU_CORES
|
||||
|
||||
# libvpx does not compile with this gcc6 version
|
||||
export CC=/usr/bin/gcc
|
||||
export CXX=/usr/bin/g++
|
||||
|
||||
cmake --build . --target ext_libvpx
|
||||
cmake --build . --target ext_libvpx -j$CPU_CORES
|
||||
|
||||
export CC=/usr/bin/gcc-6
|
||||
export CXX=/usr/bin/g++-6
|
||||
|
||||
cmake --build . --target ext_ffmpeg
|
||||
cmake --build . --target ext_sox
|
||||
cmake --build . --target ext_jack
|
||||
cmake --build . --target ext_ladspa
|
||||
cmake --build . --target ext_cairo
|
||||
cmake --build . --target ext_harfbuzz
|
||||
cmake --build . --target ext_pango
|
||||
cmake --build . --target ext_gdkpixbuf
|
||||
cmake --build . --target ext_gtk+
|
||||
cmake --build . --target ext_gavl
|
||||
cmake --build . --target ext_frei0r
|
||||
cmake --build . --target ext_vidstab
|
||||
cmake --build . --target ext_opencv
|
||||
cmake --build . --target ext_rubberband
|
||||
|
||||
#export CC=/usr/bin/gcc-6
|
||||
#export CXX=/usr/bin/g++-6
|
||||
cmake --build . --target ext_opus -j$CPU_CORES
|
||||
cmake --build . --target ext_nv-codec-headers -j$CPU_CORES
|
||||
cmake --build . --target ext_amf -j$CPU_CORES
|
||||
cmake --build . --target ext_mfx -j$CPU_CORES
|
||||
cmake --build . --target ext_ffmpeg -j$CPU_CORES
|
||||
cmake --build . --target ext_sox -j$CPU_CORES
|
||||
cmake --build . --target ext_jack -j$CPU_CORES
|
||||
cmake --build . --target ext_ladspa -j$CPU_CORES
|
||||
cmake --build . --target ext_cairo -j$CPU_CORES
|
||||
cmake --build . --target ext_harfbuzz -j$CPU_CORES
|
||||
cmake --build . --target ext_pango -j$CPU_CORES
|
||||
cmake --build . --target ext_gdkpixbuf -j$CPU_CORES
|
||||
cmake --build . --target ext_gtk+ -j$CPU_CORES
|
||||
cmake --build . --target ext_gavl -j$CPU_CORES
|
||||
cmake --build . --target ext_frei0r -j$CPU_CORES
|
||||
cmake --build . --target ext_vidstab -j$CPU_CORES
|
||||
cmake --build . --target ext_opencv -j$CPU_CORES
|
||||
|
||||
export CC=/usr/bin/gcc-6
|
||||
export CXX=/usr/bin/g++-6
|
||||
|
||||
|
||||
##cmake --build . --target ext_movit
|
||||
|
||||
cmake --build . --target ext_frameworks
|
||||
cmake --build . --config RelWithDebInfo --target ext_extra-cmake-modules -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kconfig -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_breeze-icons -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kcoreaddons -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kwindowsystem -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_solid -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_threadweaver -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_karchive -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kdbusaddons -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_ki18n -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kcrash -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kcodecs -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kauth -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kguiaddons -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kwidgetsaddons -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kitemviews -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kcompletion -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kconfigwidgets -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kservice -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kiconthemes -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_attica -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kglobalaccel -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kxmlgui -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kbookmarks -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kjobwidgets -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_sonnet -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_ktextwidgets -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kio -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_knotifyconfig -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kpackage -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_knewstuff -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_knotifications -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kdeclarative -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kservice -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_kimageformats -- -j$CPU_CORES
|
||||
cmake --build . --config RelWithDebInfo --target ext_frameworkintegration -- -j$CPU_CORES
|
||||
|
||||
#cmake --build . --target ext_movit
|
||||
cmake --build . --target ext_kbookmarks
|
||||
cmake --build . --target ext_kxmlgui
|
||||
cmake --build . --target ext_kconfigwidgets
|
||||
cmake --build . --target ext_knotifyconfig
|
||||
cmake --build . --target ext_knewstuff
|
||||
cmake --build . --target ext_kdeclarative
|
||||
cmake --build . --target ext_breezeicons
|
||||
cmake --build . --target ext_kcrash
|
||||
cmake --build . --target ext_breeze
|
||||
cmake --build . --target ext_ruby
|
||||
#cmake --build . --target ext_kwayland
|
||||
#cmake --build . --target ext_ruby
|
||||
|
||||
@@ -16,6 +16,7 @@ export APPIMAGEPLUGINS=$APPDIR/usr/plugins/
|
||||
mkdir -p $APPDIR
|
||||
mkdir -p $APPDIR/usr/share/kdenlive
|
||||
mkdir -p $APPDIR/usr/lib
|
||||
mkdir -p $APPDIR/usr/lib/va
|
||||
mkdir -p $PLUGINS
|
||||
mkdir -p $APPDIR/usr/plugins
|
||||
|
||||
@@ -43,11 +44,11 @@ cd $BUILD_PREFIX
|
||||
|
||||
# Step 1: Copy over all the resources provided by dependencies that we need
|
||||
cp -r $DEPS_INSTALL_PREFIX/share/kf5 $APPDIR/usr/share
|
||||
cp -r $DEPS_INSTALL_PREFIX/share/kstyle $APPDIR/usr/share
|
||||
cp -r $DEPS_INSTALL_PREFIX/share/plasma $APPDIR/usr/share
|
||||
#cp -r $DEPS_INSTALL_PREFIX/share/kstyle $APPDIR/usr/share
|
||||
#cp -r $DEPS_INSTALL_PREFIX/share/plasma $APPDIR/usr/share
|
||||
cp -r $DEPS_INSTALL_PREFIX/share/alsa $APPDIR/usr/share
|
||||
cp -r $DEPS_INSTALL_PREFIX/share/kservices5 $APPDIR/usr/share
|
||||
cp -r $DEPS_INSTALL_PREFIX/share/qt5 $APPDIR/usr/share
|
||||
#cp -r $DEPS_INSTALL_PREFIX/share/qt5 $APPDIR/usr/share
|
||||
cp -r $DEPS_INSTALL_PREFIX/share/mime $APPDIR/usr/share
|
||||
|
||||
if [ -d $DEPS_INSTALL_PREFIX/share/color-schemes ] ; then
|
||||
@@ -73,15 +74,19 @@ cp -r $DEPS_INSTALL_PREFIX/bin/ffmpeg $APPDIR/usr/bin
|
||||
cp -r $DEPS_INSTALL_PREFIX/bin/ffplay $APPDIR/usr/bin
|
||||
cp -r $DEPS_INSTALL_PREFIX/bin/ffprobe $APPDIR/usr/bin
|
||||
cp -r $DEPS_INSTALL_PREFIX/plugins/kf5 $APPIMAGEPLUGINS
|
||||
cp -r $DEPS_INSTALL_PREFIX/plugins/styles $APPIMAGEPLUGINS
|
||||
#cp -r $DEPS_INSTALL_PREFIX/plugins/styles $APPIMAGEPLUGINS
|
||||
cp -r $DEPS_INSTALL_PREFIX/plugins/audio $APPIMAGEPLUGINS
|
||||
cp -r $DEPS_INSTALL_PREFIX/plugins/org.kde.kdecoration2 $APPIMAGEPLUGINS
|
||||
cp -r $DEPS_INSTALL_PREFIX/plugins/kstyle_breeze_config.so $APPIMAGEPLUGINS
|
||||
#cp -r $DEPS_INSTALL_PREFIX/plugins/org.kde.kdecoration2 $APPIMAGEPLUGINS
|
||||
#cp -r $DEPS_INSTALL_PREFIX/plugins/kstyle_breeze_config.so $APPIMAGEPLUGINS
|
||||
|
||||
mkdir -p $APPDIR/usr/libexec
|
||||
|
||||
cp -r $DEPS_INSTALL_PREFIX/lib/x86_64-linux-gnu/libexec/kf5/* $APPDIR/usr/libexec/
|
||||
|
||||
#libva accel
|
||||
cp -r /usr/lib/x86_64-linux-gnu/libva* $APPDIR/usr/lib || true
|
||||
cp -r /usr/lib/x86_64-linux-gnu/dri/*_drv_video.so $APPDIR/usr/lib/va || true
|
||||
|
||||
cp $(ldconfig -p | grep libGL.so.1 | cut -d ">" -f 2 | xargs) $APPDIR/usr/lib/
|
||||
#cp $(ldconfig -p | grep libGLU.so.1 | cut -d ">" -f 2 | xargs) $APPDIR/usr/lib/
|
||||
|
||||
@@ -101,22 +106,32 @@ for lib in $APPIMAGEPLUGINS/audio/*.so*; do
|
||||
patchelf --set-rpath '$ORIGIN/../../lib' $lib;
|
||||
done
|
||||
|
||||
for lib in $APPIMAGEPLUGINS/styles/*.so*; do
|
||||
patchelf --set-rpath '$ORIGIN/../../lib' $lib;
|
||||
done
|
||||
#for lib in $APPIMAGEPLUGINS/styles/*.so*; do
|
||||
# patchelf --set-rpath '$ORIGIN/../../lib' $lib;
|
||||
#done
|
||||
|
||||
for lib in $APPIMAGEPLUGINS/kf5/*.so*; do
|
||||
patchelf --set-rpath '$ORIGIN/../../lib' $lib;
|
||||
done
|
||||
|
||||
for lib in $APPIMAGEPLUGINS/org.kde.kdecoration2/*.so*; do
|
||||
patchelf --set-rpath '$ORIGIN/../../lib' $lib;
|
||||
done
|
||||
#for lib in $APPIMAGEPLUGINS/org.kde.kdecoration2/*.so*; do
|
||||
# patchelf --set-rpath '$ORIGIN/../../lib' $lib;
|
||||
#done
|
||||
|
||||
for lib in $APPDIR/usr/lib/mlt/*.so*; do
|
||||
patchelf --set-rpath '$ORIGIN/..' $lib;
|
||||
done
|
||||
|
||||
|
||||
#for lib in $APPDIR/usr/lib/libva*.so*; do
|
||||
# patchelf --set-rpath '$ORIGIN' $lib;
|
||||
#done
|
||||
|
||||
#for lib in $APPDIR/usr/lib/va/*.so*; do
|
||||
# patchelf --set-rpath '$ORIGIN/..' $lib;
|
||||
#done
|
||||
|
||||
|
||||
### GSTREAMER
|
||||
# Requires gstreamer1.0-plugins-good
|
||||
GST_PLUGIN_SRC_DIR=/usr/lib/x86_64-linux-gnu/
|
||||
@@ -153,6 +168,12 @@ cp $APPDIR/usr/share/icons/breeze/apps/48/kdenlive.svg $APPDIR
|
||||
#linuxdeployqt $APPDIR/usr/bin/ffplay
|
||||
#linuxdeployqt $APPDIR/usr/bin/ffprobe
|
||||
#linuxdeployqt $APPDIR/usr/bin/melt
|
||||
#linuxdeployqt -executable $APPDIR/usr/lib/va/*.so
|
||||
|
||||
|
||||
# -executable=$APPDIR/usr/lib/libva.so \
|
||||
# -executable=$APPDIR/usr/lib/libva-drm.so \
|
||||
# -executable=$APPDIR/usr/lib/libva-x11.so \
|
||||
|
||||
linuxdeployqt $APPDIR/usr/share/applications/org.kde.kdenlive.desktop \
|
||||
-executable=$APPDIR/usr/bin/kdenlive \
|
||||
@@ -168,8 +189,9 @@ rm $APPDIR/usr/lib/libGL.so.1 || true
|
||||
rm $APPDIR/usr/lib/libasound.so.2 || true
|
||||
|
||||
|
||||
# libxcb should be removed
|
||||
rm $APPDIR/usr/lib/libxcb* || true
|
||||
# libxcb and libxcb-dri{2,3} should be removed
|
||||
rm $APPDIR/usr/lib/libxcb.so* || true
|
||||
rm $APPDIR/usr/lib/libxcb-dri{2,3}.so* || true
|
||||
|
||||
rm $APPDIR/usr/lib/libgcrypt.so.20 || true
|
||||
|
||||
@@ -193,6 +215,7 @@ 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 LIBVA_DRIVERS_PATH=\$DIR/usr/lib/va
|
||||
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/
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"app-id": "org.kde.kdenlive",
|
||||
"default-branch": "master",
|
||||
"runtime": "org.kde.Platform",
|
||||
"runtime-version": "5.13",
|
||||
"runtime-version": "5.15",
|
||||
"sdk": "org.kde.Sdk",
|
||||
"command": "kdenlive",
|
||||
"rename-icon": "kdenlive",
|
||||
|
||||
@@ -9,6 +9,7 @@ include_directories(
|
||||
set(kdenlive_render_SRCS
|
||||
kdenlive_render.cpp
|
||||
renderjob.cpp
|
||||
../src/lib/localeHandling.cpp
|
||||
)
|
||||
|
||||
add_executable(kdenlive_render ${kdenlive_render_SRCS})
|
||||
|
||||
@@ -17,23 +17,18 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
|
||||
***************************************************************************/
|
||||
|
||||
#include "framework/mlt_version.h"
|
||||
#include "../src/lib/localeHandling.h"
|
||||
#include "mlt++/Mlt.h"
|
||||
#include "renderjob.h"
|
||||
#include <QApplication>
|
||||
#include <QDir>
|
||||
#include <QDomDocument>
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
#include <QObject>
|
||||
#include <cstdio>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
QApplication app(argc, argv);
|
||||
QStringList args = app.arguments();
|
||||
QStringList preargs;
|
||||
QString locale;
|
||||
if (args.count() >= 4) {
|
||||
// Remove program name
|
||||
args.removeFirst();
|
||||
@@ -56,7 +51,11 @@ int main(int argc, char **argv)
|
||||
if (args.count() > 0 && args.at(0) == QLatin1String("-split")) {
|
||||
args.removeFirst();
|
||||
// chunks to render
|
||||
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
|
||||
QStringList chunks = args.at(0).split(QLatin1Char(','), QString::SkipEmptyParts);
|
||||
#else
|
||||
QStringList chunks = args.at(0).split(QLatin1Char(','), Qt::SkipEmptyParts);
|
||||
#endif
|
||||
args.removeFirst();
|
||||
// chunk size in frames
|
||||
int chunkSize = args.at(0).toInt();
|
||||
@@ -68,10 +67,19 @@ int main(int argc, char **argv)
|
||||
QString extension = args.at(0);
|
||||
args.removeFirst();
|
||||
// avformat consumer params
|
||||
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
|
||||
QStringList consumerParams = args.at(0).split(QLatin1Char(' '), QString::SkipEmptyParts);
|
||||
#else
|
||||
QStringList consumerParams = args.at(0).split(QLatin1Char(' '), Qt::SkipEmptyParts);
|
||||
#endif
|
||||
args.removeFirst();
|
||||
QDir baseFolder(target);
|
||||
|
||||
// After initialising the MLT factory, set the locale back from user default to C
|
||||
// to ensure numbers are always serialised with . as decimal point.
|
||||
Mlt::Factory::init();
|
||||
LocaleHandling::resetLocale();
|
||||
|
||||
Mlt::Profile profile(profilePath.toUtf8().constData());
|
||||
profile.set_explicit(1);
|
||||
Mlt::Producer prod(profile, nullptr, playlist.toUtf8().constData());
|
||||
@@ -81,9 +89,9 @@ int main(int argc, char **argv)
|
||||
}
|
||||
const char *localename = prod.get_lcnumeric();
|
||||
QLocale::setDefault(QLocale(localename));
|
||||
for (const QString &frame : chunks) {
|
||||
for (const QString &frame : qAsConst(chunks)) {
|
||||
fprintf(stderr, "START:%d \n", frame.toInt());
|
||||
QString fileName = QStringLiteral("%1.%2").arg(frame).arg(extension);
|
||||
QString fileName = QStringLiteral("%1.%2").arg(frame,extension);
|
||||
if (baseFolder.exists(fileName)) {
|
||||
// Don't overwrite an existing file
|
||||
fprintf(stderr, "DONE:%d \n", frame.toInt());
|
||||
@@ -92,7 +100,7 @@ int main(int argc, char **argv)
|
||||
QScopedPointer<Mlt::Producer> playlst(prod.cut(frame.toInt(), frame.toInt() + chunkSize));
|
||||
QScopedPointer<Mlt::Consumer> cons(
|
||||
new Mlt::Consumer(profile, QString("avformat:%1").arg(baseFolder.absoluteFilePath(fileName)).toUtf8().constData()));
|
||||
for (const QString ¶m : consumerParams) {
|
||||
for (const QString ¶m : qAsConst(consumerParams)) {
|
||||
if (param.contains(QLatin1Char('='))) {
|
||||
cons->set(param.section(QLatin1Char('='), 0, 0).toUtf8().constData(), param.section(QLatin1Char('='), 1).toUtf8().constData());
|
||||
}
|
||||
|
||||
@@ -43,10 +43,12 @@ RenderJob::RenderJob(const QString &render, const QString &scenelist, const QStr
|
||||
, m_jobUiserver(nullptr)
|
||||
, m_kdenliveinterface(nullptr)
|
||||
, m_usekuiserver(true)
|
||||
, m_logfile(scenelist.startsWith(QStringLiteral("xml:")) ? scenelist.section(QLatin1Char(':'), 1).section(QLatin1Char('?'), 0, -2) + QStringLiteral(".txt") : scenelist + QStringLiteral(".txt"))
|
||||
, m_logfile(target + QStringLiteral(".log"))
|
||||
, m_erase(scenelist.startsWith(QDir::tempPath()) || scenelist.startsWith(QString("xml:%2").arg(QDir::tempPath())))
|
||||
, m_seconds(0)
|
||||
, m_frame(0)
|
||||
, m_frame(in)
|
||||
, m_framein(in)
|
||||
, m_frameout(out)
|
||||
, m_pid(pid)
|
||||
, m_dualpass(false)
|
||||
{
|
||||
@@ -80,11 +82,6 @@ RenderJob::~RenderJob()
|
||||
m_logfile.close();
|
||||
}
|
||||
|
||||
void RenderJob::setLocale(const QString &locale)
|
||||
{
|
||||
qputenv("LC_NUMERIC", locale.toUtf8().constData());
|
||||
}
|
||||
|
||||
void RenderJob::slotAbort(const QString &url)
|
||||
{
|
||||
if (m_dest == url) {
|
||||
@@ -98,9 +95,7 @@ void RenderJob::slotAbort()
|
||||
m_renderProcess->kill();
|
||||
|
||||
if (m_kdenliveinterface) {
|
||||
m_dbusargs[1] = -3;
|
||||
m_dbusargs.append(QString());
|
||||
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, QStringLiteral("setRenderingFinished"), m_dbusargs);
|
||||
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, QStringLiteral("setRenderingFinished"), {m_dest, -3, QString()});
|
||||
}
|
||||
if (m_jobUiserver) {
|
||||
m_jobUiserver->call(QStringLiteral("terminate"), QString());
|
||||
@@ -120,41 +115,46 @@ void RenderJob::receivedStderr()
|
||||
QString result = QString::fromLocal8Bit(m_renderProcess->readAllStandardError()).simplified();
|
||||
if (!result.startsWith(QLatin1String("Current Frame"))) {
|
||||
m_errorMessage.append(result + QStringLiteral("<br>"));
|
||||
m_logstream << result;
|
||||
} else {
|
||||
m_logstream << "melt: " << result << "\n";
|
||||
int pro = result.section(QLatin1Char(' '), -1).toInt();
|
||||
if (pro <= m_progress || pro <= 0 || pro > 100) {
|
||||
int progress = result.section(QLatin1Char(' '), -1).toInt();
|
||||
int frame = result.section(QLatin1Char(','), 0, 0).section(QLatin1Char(' '), -1).toInt();
|
||||
if (progress <= m_progress || progress <= 0 || progress > 100) {
|
||||
return;
|
||||
}
|
||||
m_progress = pro;
|
||||
m_progress = progress;
|
||||
if (m_args.contains(QStringLiteral("pass=1"))) {
|
||||
m_progress /= 2.0;
|
||||
} else if (m_args.contains(QStringLiteral("pass=2"))) {
|
||||
m_progress = 50 + m_progress / 2.0;
|
||||
}
|
||||
int frame = result.section(QLatin1Char(','), 1).section(QLatin1Char(' '), -1).toInt();
|
||||
if ((m_kdenliveinterface != nullptr) && m_kdenliveinterface->isValid()) {
|
||||
m_dbusargs[1] = m_progress;
|
||||
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, QStringLiteral("setRenderingProgress"), m_dbusargs);
|
||||
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, QStringLiteral("setRenderingProgress"), {m_dest, m_progress, frame});
|
||||
}
|
||||
qint64 elapsedTime = m_startTime.secsTo(QDateTime::currentDateTime());
|
||||
if (elapsedTime == m_seconds) {
|
||||
return;
|
||||
}
|
||||
int speed = (frame - m_frame) / (elapsedTime - m_seconds);
|
||||
if (m_jobUiserver) {
|
||||
m_jobUiserver->call(QStringLiteral("setPercent"), (uint)m_progress);
|
||||
int seconds = m_startTime.secsTo(QTime::currentTime());
|
||||
if (seconds < 0) {
|
||||
// 1 day offset, add seconds in a day
|
||||
seconds += 86400;
|
||||
qint64 remaining = elapsedTime * (100 - progress) / progress;
|
||||
int days = int(remaining / 86400);
|
||||
int remainingSecs = int(remaining % 86400);
|
||||
QTime when = QTime(0, 0, 0, 0).addSecs(remainingSecs);
|
||||
QString est = tr("Remaining time ");
|
||||
if (days > 0) {
|
||||
est.append(tr("%n day(s) ", "", days));
|
||||
}
|
||||
seconds = (int)(seconds * (100 - m_progress) / m_progress);
|
||||
if (seconds == m_seconds) {
|
||||
return;
|
||||
}
|
||||
m_jobUiserver->call(QStringLiteral("setDescriptionField"), (uint)0, QString(),
|
||||
tr("Remaining time: ") + QTime(0, 0, 0).addSecs(seconds).toString(QStringLiteral("hh:mm:ss")));
|
||||
// m_jobUiserver->call(QStringLiteral("setSpeed"), (frame - m_frame) / (seconds - m_seconds));
|
||||
// m_jobUiserver->call("setSpeed", (frame - m_frame) / (seconds - m_seconds));
|
||||
m_frame = frame;
|
||||
m_seconds = seconds;
|
||||
est.append(when.toString(QStringLiteral("hh:mm:ss")));
|
||||
|
||||
m_jobUiserver->call(QStringLiteral("setPercent"), uint(m_progress));
|
||||
m_jobUiserver->call(QStringLiteral("setDescriptionField"), 0, QString(), est);
|
||||
m_jobUiserver->call(QStringLiteral("setProcessedAmount"), qulonglong(frame - m_framein), tr("frames"));
|
||||
m_jobUiserver->call(QStringLiteral("setSpeed"), qulonglong(speed));
|
||||
}
|
||||
m_seconds = elapsedTime;
|
||||
m_frame = frame;
|
||||
m_logstream << QStringLiteral("%1\t%2\t%3\t%4\n").arg(m_seconds).arg(m_frame).arg(m_progress).arg(speed);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -186,12 +186,13 @@ void RenderJob::start()
|
||||
QString dbusView = QStringLiteral("org.kde.JobViewV2");
|
||||
m_jobUiserver = new QDBusInterface(QStringLiteral("org.kde.JobViewServer"), reply, dbusView);
|
||||
if ((m_jobUiserver != nullptr) && m_jobUiserver->isValid()) {
|
||||
m_startTime = QTime::currentTime();
|
||||
m_startTime = QDateTime::currentDateTime();
|
||||
if (!m_args.contains(QStringLiteral("pass=2"))) {
|
||||
m_jobUiserver->call(QStringLiteral("setPercent"), (uint)0);
|
||||
}
|
||||
|
||||
m_jobUiserver->call(QStringLiteral("setInfoMessage"), tr("Rendering %1").arg(QFileInfo(m_dest).fileName()));
|
||||
m_jobUiserver->call(QStringLiteral("setTotalAmount"), m_frameout);
|
||||
QDBusConnection::sessionBus().connect(QStringLiteral("org.kde.JobViewServer"), reply, dbusView, QStringLiteral("cancelRequested"), this,
|
||||
SLOT(slotAbort()));
|
||||
}
|
||||
@@ -210,7 +211,6 @@ void RenderJob::start()
|
||||
// Because of the logging, we connect to stderr in all cases.
|
||||
connect(m_renderProcess, &QProcess::readyReadStandardError, this, &RenderJob::receivedStderr);
|
||||
m_renderProcess->start(m_prog, m_args);
|
||||
qDebug() << "Started render process: " << m_prog << ' ' << m_args.join(QLatin1Char(' '));
|
||||
m_logstream << "Started render process: " << m_prog << ' ' << m_args.join(QLatin1Char(' ')) << "\n";
|
||||
m_logstream.flush();
|
||||
}
|
||||
@@ -232,7 +232,6 @@ void RenderJob::initKdenliveDbusInterface()
|
||||
break;
|
||||
}
|
||||
}
|
||||
m_dbusargs.clear();
|
||||
if (kdenliveId.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
@@ -240,10 +239,8 @@ void RenderJob::initKdenliveDbusInterface()
|
||||
new QDBusInterface(kdenliveId, QStringLiteral("/kdenlive/MainWindow_1"), QStringLiteral("org.kde.kdenlive.rendering"), connection, this);
|
||||
|
||||
if (m_kdenliveinterface) {
|
||||
m_dbusargs.append(m_dest);
|
||||
m_dbusargs.append((int)0);
|
||||
if (!m_args.contains(QStringLiteral("pass=2"))) {
|
||||
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, QStringLiteral("setRenderingProgress"), m_dbusargs);
|
||||
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, QStringLiteral("setRenderingProgress"), {m_dest, 0, 0});
|
||||
}
|
||||
connect(m_kdenliveinterface, SIGNAL(abortRenderJob(QString)), this, SLOT(slotAbort(QString)));
|
||||
}
|
||||
@@ -265,9 +262,7 @@ void RenderJob::slotIsOver(QProcess::ExitStatus status, bool isWritable)
|
||||
if (!isWritable) {
|
||||
QString error = tr("Cannot write to %1, check permissions.").arg(m_dest);
|
||||
if (m_kdenliveinterface) {
|
||||
m_dbusargs[1] = (int)-2;
|
||||
m_dbusargs.append(error);
|
||||
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, QStringLiteral("setRenderingFinished"), m_dbusargs);
|
||||
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, QStringLiteral("setRenderingFinished"), {m_dest, -2, error});
|
||||
}
|
||||
QProcess::startDetached(QStringLiteral("kdialog"), {QStringLiteral("--error"), error});
|
||||
m_logstream << error << "\n";
|
||||
@@ -280,21 +275,20 @@ void RenderJob::slotIsOver(QProcess::ExitStatus status, bool isWritable)
|
||||
if (status == QProcess::CrashExit || m_renderProcess->error() != QProcess::UnknownError || m_renderProcess->exitCode() != 0) {
|
||||
// rendering crashed
|
||||
if (m_kdenliveinterface) {
|
||||
m_dbusargs[1] = (int)-2;
|
||||
m_dbusargs.append(m_errorMessage);
|
||||
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, QStringLiteral("setRenderingFinished"), m_dbusargs);
|
||||
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, QStringLiteral("setRenderingFinished"), {m_dest, -2, m_errorMessage});
|
||||
}
|
||||
QStringList args;
|
||||
QString error = tr("Rendering of %1 aborted, resulting video will probably be corrupted.").arg(m_dest);
|
||||
if (m_frame > 0) {
|
||||
error += QLatin1Char('\n') + tr("Frame: ") + m_frame;
|
||||
}
|
||||
args << QStringLiteral("--error") << error;
|
||||
m_logstream << error << "\n";
|
||||
QProcess::startDetached(QStringLiteral("kdialog"), args);
|
||||
emit renderingFinished();
|
||||
} else {
|
||||
if (!m_dualpass && (m_kdenliveinterface != nullptr)) {
|
||||
m_dbusargs[1] = (int)-1;
|
||||
m_dbusargs.append(QString());
|
||||
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, QStringLiteral("setRenderingFinished"), m_dbusargs);
|
||||
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, QStringLiteral("setRenderingFinished"), {m_dest, -1, QString()});
|
||||
}
|
||||
m_logstream << "Rendering of " << m_dest << " finished" << "\n";
|
||||
if (!m_dualpass && m_player.length() > 3 && m_player.contains(QLatin1Char(' '))) {
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#include <QDBusInterface>
|
||||
#include <QObject>
|
||||
#include <QProcess>
|
||||
#include <QTime>
|
||||
#include <QDateTime>
|
||||
#include <QFile>
|
||||
// Testing
|
||||
#include <QTextStream>
|
||||
@@ -35,7 +35,6 @@ class RenderJob : public QObject
|
||||
public:
|
||||
RenderJob(const QString &render, const QString &scenelist, const QString &target, int pid = -1, int in = -1, int out = -1, QObject *parent = nullptr);
|
||||
~RenderJob();
|
||||
void setLocale(const QString &locale);
|
||||
|
||||
public slots:
|
||||
void start();
|
||||
@@ -61,13 +60,15 @@ private:
|
||||
bool m_erase;
|
||||
int m_seconds;
|
||||
int m_frame;
|
||||
int m_framein;
|
||||
int m_frameout;
|
||||
/** @brief The process id of the Kdenlive instance, used to get the dbus service. */
|
||||
int m_pid;
|
||||
bool m_dualpass;
|
||||
QProcess *m_renderProcess;
|
||||
QString m_errorMessage;
|
||||
QList<QVariant> m_dbusargs;
|
||||
QTime m_startTime;
|
||||
QDateTime m_startTime;
|
||||
QStringList m_args;
|
||||
/** @brief Used to write to the log file. */
|
||||
QTextStream m_logstream;
|
||||
|
||||
@@ -65,7 +65,7 @@ add_subdirectory(transitions)
|
||||
add_subdirectory(utils)
|
||||
add_subdirectory(widgets)
|
||||
add_subdirectory(xml)
|
||||
if(Qt5WebKitWidgets_FOUND)
|
||||
if(Qt5WebEngineWidgets_FOUND)
|
||||
add_subdirectory(qt-oauth-lib)
|
||||
endif()
|
||||
## top_SRCS
|
||||
@@ -85,7 +85,7 @@ ki18n_wrap_ui(kdenlive_UIS ${kdenlive_UIS})
|
||||
qt5_wrap_cpp(kdenlive_MOC definitions.h)
|
||||
set_property(SOURCE definitions.h PROPERTY SKIP_AUTOMOC ON)
|
||||
|
||||
add_library(kdenliveLib STATIC ${kdenlive_SRCS} ${kdenlive_UIS} ${kdenlive_MOC})
|
||||
add_library(kdenliveLib STATIC ${kdenlive_SRCS} ${kdenlive_UIS} ${kdenlive_MOC} lib/localeHandling.cpp lib/localeHandling.h)
|
||||
|
||||
qt5_add_resources(kdenlive_extra_SRCS icons.qrc ui/resources.qrc uiresources.qrc)
|
||||
## Icon for Windows and OSX
|
||||
@@ -94,7 +94,9 @@ ecm_add_app_icon(kdenlive ICONS ${ICONS_SRCS}) # icon name = variable name
|
||||
add_executable(kdenlive main.cpp ${kdenlive_extra_SRCS} ${kdenlive})
|
||||
target_include_directories(kdenlive
|
||||
PRIVATE ${CMAKE_BINARY_DIR}
|
||||
SYSTEM ${MLT_INCLUDE_DIR} ${MLTPP_INCLUDE_DIR})
|
||||
)
|
||||
target_include_directories(kdenlive
|
||||
SYSTEM PRIVATE ${MLT_INCLUDE_DIR} ${MLTPP_INCLUDE_DIR})
|
||||
target_link_libraries(kdenlive kdenliveLib)
|
||||
install(TARGETS kdenlive DESTINATION ${BIN_INSTALL_DIR})
|
||||
|
||||
@@ -106,7 +108,9 @@ target_include_directories(kdenliveLib
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/lib/external
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/lib
|
||||
SYSTEM ${MLT_INCLUDE_DIR} ${MLTPP_INCLUDE_DIR})
|
||||
)
|
||||
target_include_directories(kdenliveLib
|
||||
SYSTEM PRIVATE ${MLT_INCLUDE_DIR} ${MLTPP_INCLUDE_DIR})
|
||||
# Adds Qt definitions and include directories, and sets QT_LIBRARIES according
|
||||
# to the components requested in find_package().
|
||||
# KDE definitions and include directories *must* always come first, Qt follows
|
||||
@@ -152,27 +156,12 @@ if(BUILD_COVERAGE)
|
||||
target_link_libraries(kdenliveLib gcov)
|
||||
endif()
|
||||
set_property(TARGET kdenliveLib PROPERTY CXX_STANDARD 14)
|
||||
SET(KDENLIVE_CXX_FLAGS "${DEFAULT_CXX_FLAGS} -Wall -pedantic -Wextra")
|
||||
SET(KDENLIVE_CXX_FLAGS "${KDENLIVE_CXX_FLAGS} -Wcast-qual -Wcast-align -Wfloat-equal -Wpointer-arith")
|
||||
SET(KDENLIVE_CXX_FLAGS "${KDENLIVE_CXX_FLAGS} -Wunreachable-code -Wchar-subscripts -Wcomment -Wformat")
|
||||
SET(KDENLIVE_CXX_FLAGS "${KDENLIVE_CXX_FLAGS} -Wmain -Wmissing-braces")
|
||||
SET(KDENLIVE_CXX_FLAGS "${KDENLIVE_CXX_FLAGS} -Wparentheses -Wsequence-point -Wreturn-type -Wswitch")
|
||||
SET(KDENLIVE_CXX_FLAGS "${KDENLIVE_CXX_FLAGS} -Wuninitialized -Wreorder -Wundef -Wshadow -Wwrite-strings")
|
||||
SET(KDENLIVE_CXX_FLAGS "${KDENLIVE_CXX_FLAGS} -Wmissing-noreturn -Wsign-compare -Wsign-conversion -Wunused")
|
||||
SET(KDENLIVE_CXX_FLAGS "${KDENLIVE_CXX_FLAGS} -Wstrict-aliasing -Wconversion -Wdisabled-optimization -Wno-undef")
|
||||
SET(KDENLIVE_CXX_FLAGS "${KDENLIVE_CXX_FLAGS} -Wunused-parameter -Wshadow -Wno-variadic-macros -Wno-float-conversion")
|
||||
if(KDENLIVE_COMPILER_IS_GNUCXX)
|
||||
SET(KDENLIVE_CXX_FLAGS "${KDENLIVE_CXX_FLAGS} -Wlogical-op -Wunsafe-loop-optimizations ")
|
||||
endif()
|
||||
set_target_properties(kdenliveLib PROPERTIES COMPILE_FLAGS "${KDENLIVE_CXX_FLAGS}")
|
||||
add_definitions(${qt5gui_definitions} -DQT_STRICT_ITERATORS -DQT_NO_CAST_FROM_BYTEARRAY)
|
||||
# To compile kiss_fft.
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --std=c99")
|
||||
|
||||
# Optional deps
|
||||
if(DRMINGW_FOUND)
|
||||
target_compile_definitions(kdenlive PRIVATE -DUSE_DRMINGW)
|
||||
target_include_directories(kdenlive PRIVATE SYSTEM ${DRMINGW_INCLUDE_DIR})
|
||||
target_include_directories(kdenlive SYSTEM PRIVATE ${DRMINGW_INCLUDE_DIR})
|
||||
target_link_libraries(kdenlive ${DRMINGW_LIBRARY})
|
||||
elseif(KF5Crash_FOUND)
|
||||
target_compile_definitions(kdenlive PRIVATE -DKF5_USE_CRASH)
|
||||
@@ -189,16 +178,16 @@ if(KF5_PURPOSE)
|
||||
target_link_libraries(kdenliveLib KF5::Purpose KF5::PurposeWidgets)
|
||||
endif()
|
||||
|
||||
if(Qt5WebKitWidgets_FOUND)
|
||||
message(STATUS "Found Qt5 WebKitWidgets. You can use your Freesound.org credentials to download files")
|
||||
target_compile_definitions(kdenliveLib PRIVATE -DQT5_USE_WEBKIT)
|
||||
target_link_libraries(kdenliveLib Qt5::WebKitWidgets)
|
||||
if(Qt5WebEngineWidgets_FOUND)
|
||||
message(STATUS "Found Qt5 WebEngineWidgets. You can use your Freesound.org credentials to download files")
|
||||
target_compile_definitions(kdenliveLib PRIVATE -DQT5_USE_WEBENGINE)
|
||||
target_link_libraries(kdenliveLib Qt5::WebEngineWidgets)
|
||||
else()
|
||||
message(STATUS "Qt5 WebKitWidgets not found. You cannot use your Freesound.org credentials, only preview files can be downloaded from the Online Resources Widget")
|
||||
message(STATUS "Qt5 WebEngineWidgets not found. You cannot use your Freesound.org credentials, only preview files can be downloaded from the Online Resources Widget")
|
||||
endif()
|
||||
|
||||
if(Q_WS_X11)
|
||||
target_include_directories(kdenliveLib PRIVATE SYSTEM ${X11_Xlib_INCLUDE_PATH})
|
||||
target_include_directories(kdenliveLib SYSTEM PRIVATE ${X11_Xlib_INCLUDE_PATH})
|
||||
target_link_libraries(kdenliveLib ${X11_LIBRARIES})
|
||||
endif()
|
||||
|
||||
@@ -209,7 +198,7 @@ elseif(SDL_FOUND)
|
||||
endif()
|
||||
|
||||
if(LIBV4L2_FOUND)
|
||||
target_include_directories(kdenliveLib PRIVATE SYSTEM ${LIBV4L2_INCLUDE_DIR})
|
||||
target_include_directories(kdenliveLib SYSTEM PRIVATE ${LIBV4L2_INCLUDE_DIR})
|
||||
target_link_libraries(kdenliveLib ${LIBV4L2_LIBRARY})
|
||||
target_compile_definitions(kdenliveLib PRIVATE -DUSE_V4L)
|
||||
endif()
|
||||
|
||||
@@ -49,6 +49,9 @@ public:
|
||||
|
||||
/* @brief Return type of asset */
|
||||
AssetType getType(const QString &assetId) const;
|
||||
|
||||
/* @brief Return type of asset */
|
||||
bool isUnique(const QString &assetId) const;
|
||||
|
||||
/* @brief Return name of asset */
|
||||
Q_INVOKABLE QString getName(const QString &assetId) const;
|
||||
|
||||
@@ -38,13 +38,6 @@ template <typename AssetType> AbstractAssetsRepository<AssetType>::AbstractAsset
|
||||
|
||||
template <typename AssetType> void AbstractAssetsRepository<AssetType>::init()
|
||||
{
|
||||
// Warning: Mlt::Factory::init() resets the locale to the default system value, make sure we keep correct locale
|
||||
#ifndef Q_OS_MAC
|
||||
setlocale(LC_NUMERIC, nullptr);
|
||||
#else
|
||||
setlocale(LC_NUMERIC_MASK, nullptr);
|
||||
#endif
|
||||
|
||||
// Parse blacklist
|
||||
parseAssetList(assetBlackListPath(), m_blacklist);
|
||||
|
||||
@@ -92,7 +85,7 @@ template <typename AssetType> void AbstractAssetsRepository<AssetType>::init()
|
||||
QDir current_dir(dir);
|
||||
QStringList filter {QStringLiteral("*.xml")};
|
||||
QStringList fileList = current_dir.entryList(filter, QDir::Files);
|
||||
for (const auto &file : fileList) {
|
||||
for (const auto &file : qAsConst(fileList)) {
|
||||
QString path = current_dir.absoluteFilePath(file);
|
||||
parseCustomAssetFile(path, customAssets);
|
||||
}
|
||||
@@ -149,8 +142,6 @@ template <typename AssetType> bool AbstractAssetsRepository<AssetType>::parseInf
|
||||
QDomElement eff = doc.createElement(QStringLiteral("effect"));
|
||||
eff.setAttribute(QStringLiteral("tag"), id);
|
||||
eff.setAttribute(QStringLiteral("id"), id);
|
||||
QLocale locale;
|
||||
////qCDebug(KDENLIVE_LOG)<<"Effect: "<<id;
|
||||
|
||||
Mlt::Properties param_props((mlt_properties)metadata->get_data("parameters"));
|
||||
for (int j = 0; param_props.is_valid() && j < param_props.count(); ++j) {
|
||||
@@ -172,10 +163,10 @@ template <typename AssetType> bool AbstractAssetsRepository<AssetType>::parseInf
|
||||
if (paramType == QLatin1String("float")) {
|
||||
// Float must be converted using correct locale
|
||||
if (paramdesc.get("maximum")) {
|
||||
params.setAttribute(QStringLiteral("max"), locale.toString(paramdesc.get_double("maximum")));
|
||||
params.setAttribute(QStringLiteral("max"), QString::number(paramdesc.get_double("maximum"), 'f'));
|
||||
}
|
||||
if (paramdesc.get("minimum")) {
|
||||
params.setAttribute(QStringLiteral("min"), locale.toString(paramdesc.get_double("minimum")));
|
||||
params.setAttribute(QStringLiteral("min"), QString::number(paramdesc.get_double("minimum"), 'f'));
|
||||
}
|
||||
} else {
|
||||
if (paramdesc.get("maximum")) {
|
||||
@@ -221,12 +212,12 @@ template <typename AssetType> bool AbstractAssetsRepository<AssetType>::parseInf
|
||||
if (paramType == QLatin1String("float")) {
|
||||
// floats have to be converted using correct locale
|
||||
if (paramdesc.get("default")) {
|
||||
params.setAttribute(QStringLiteral("default"), locale.toString(paramdesc.get_double("default")));
|
||||
params.setAttribute(QStringLiteral("default"), QString::number(paramdesc.get_double("default"), 'f'));
|
||||
}
|
||||
if (paramdesc.get("value")) {
|
||||
params.setAttribute(QStringLiteral("value"), locale.toString(paramdesc.get_double("value")));
|
||||
params.setAttribute(QStringLiteral("value"), QString::number(paramdesc.get_double("value"), 'f'));
|
||||
} else {
|
||||
params.setAttribute(QStringLiteral("value"), locale.toString(paramdesc.get_double("default")));
|
||||
params.setAttribute(QStringLiteral("value"), QString::number(paramdesc.get_double("default"), 'f'));
|
||||
}
|
||||
} else {
|
||||
if (paramdesc.get("default")) {
|
||||
@@ -259,7 +250,12 @@ template <typename AssetType> bool AbstractAssetsRepository<AssetType>::parseInf
|
||||
doc.appendChild(eff);
|
||||
res.xml = eff;
|
||||
return true;
|
||||
} else {
|
||||
qDebug() << "Invalid title/identifier for " << assetId;
|
||||
qDebug() << metadata->get("title") << "/" << metadata->get("identifier");
|
||||
}
|
||||
} else {
|
||||
qDebug() << "Metadata for" << assetId << "is invalid.";
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -290,6 +286,14 @@ template <typename AssetType> AssetType AbstractAssetsRepository<AssetType>::get
|
||||
return m_assets.at(assetId).type;
|
||||
}
|
||||
|
||||
template <typename AssetType> bool AbstractAssetsRepository<AssetType>::isUnique(const QString &assetId) const
|
||||
{
|
||||
if (m_assets.count(assetId) > 0) {
|
||||
return m_assets.at(assetId).xml.hasAttribute(QStringLiteral("unique"));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
template <typename AssetType> QString AbstractAssetsRepository<AssetType>::getName(const QString &assetId) const
|
||||
{
|
||||
Q_ASSERT(m_assets.count(assetId) > 0);
|
||||
@@ -330,7 +334,7 @@ template <typename AssetType> bool AbstractAssetsRepository<AssetType>::parseInf
|
||||
// Update description if the xml provide one
|
||||
QString description = Xml::getSubTagContent(currentAsset, QStringLiteral("description"));
|
||||
if (!description.isEmpty()) {
|
||||
res.description = i18n(description.toUtf8().constData()) + QString(" (%1)").arg(res.id);
|
||||
res.description = i18n(description.toUtf8().constData()) + QString(" (%1)").arg(res.mltId);
|
||||
}
|
||||
|
||||
// Update name if the xml provide one
|
||||
|
||||
@@ -88,6 +88,7 @@ QString AssetTreeModel::getDescription(bool isEffect, const QModelIndex &index)
|
||||
return QString();
|
||||
}
|
||||
|
||||
|
||||
QVariant AssetTreeModel::data(const QModelIndex &index, int role) const
|
||||
{
|
||||
if (!index.isValid()) {
|
||||
|
||||
@@ -49,6 +49,7 @@ public:
|
||||
virtual void reloadAssetMenu(QMenu *effectsMenu, KActionCategory *effectActions) = 0;
|
||||
virtual void setFavorite(const QModelIndex &index, bool favorite, bool isEffect) = 0;
|
||||
virtual void deleteEffect(const QModelIndex &index) = 0;
|
||||
virtual void editCustomAsset( const QString newName,const QString newDescription,const QModelIndex &index) = 0;
|
||||
|
||||
// for convenience, we store the column of each data field
|
||||
static int nameCol, idCol, favCol, typeCol, preferredCol;
|
||||
|
||||
@@ -54,7 +54,8 @@ public:
|
||||
|
||||
/* @brief Delete a custom effect */
|
||||
void deleteCustomEffect(const QModelIndex &index);
|
||||
|
||||
virtual void reloadCustomEffectIx(const QModelIndex &index) = 0;
|
||||
virtual void editCustomAsset(const QModelIndex &index) = 0;
|
||||
/* @brief Returns the description of the asset given its model index */
|
||||
QString getDescription(bool isEffect, const QModelIndex &index) const;
|
||||
|
||||
|
||||
@@ -283,9 +283,10 @@ Rectangle {
|
||||
sel.setCurrentIndex(styleData.index, ItemSelectionModel.ClearAndSelect)
|
||||
if (mouse.button === Qt.LeftButton) {
|
||||
drag.target = parent
|
||||
parent.grabToImage(function(result) {
|
||||
// grabToImage does not work on QQuickWidget from AssetListWidget. We should use QQuickView + QWidget::createWindowContainer
|
||||
/*parent.grabToImage(function(result) {
|
||||
parent.Drag.imageSource = result.url
|
||||
})
|
||||
})*/
|
||||
} else {
|
||||
drag.target = undefined
|
||||
assetContextMenu.isItemFavorite = assetThumb.isFavorite
|
||||
@@ -329,6 +330,22 @@ Rectangle {
|
||||
assetlist.deleteCustomEffect(sel.currentIndex)
|
||||
}
|
||||
}
|
||||
MenuItem {
|
||||
id: reloadMenu
|
||||
text: i18n("Reload custom effect")
|
||||
visible: isEffectList && assetContextMenu.isCustom
|
||||
onTriggered: {
|
||||
assetlist.reloadCustomEffectIx(sel.currentIndex)
|
||||
}
|
||||
}
|
||||
MenuItem {
|
||||
id: editMenu
|
||||
text: i18n("Edit Info")
|
||||
visible: isEffectList && assetContextMenu.isCustom
|
||||
onTriggered: {
|
||||
assetlist.editCustomEffectInfo(sel.currentIndex)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TableViewColumn { role: "identifier"; title: i18n("Name"); }
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
#include "transitions/transitionsrepository.hpp"
|
||||
#include "effects/effectsrepository.hpp"
|
||||
#include "transitions/view/transitionstackview.hpp"
|
||||
#include "transitions/view/mixstackview.hpp"
|
||||
|
||||
#include "view/assetparameterview.hpp"
|
||||
|
||||
@@ -54,6 +55,7 @@ AssetPanel::AssetPanel(QWidget *parent)
|
||||
, m_assetTitle(new KSqueezedTextLabel(this))
|
||||
, m_container(new QWidget(this))
|
||||
, m_transitionWidget(new TransitionStackView(this))
|
||||
, m_mixWidget(new MixStackView(this))
|
||||
, m_effectStackWidget(new EffectStackView(this))
|
||||
{
|
||||
auto *buttonToolbar = new QToolBar(this);
|
||||
@@ -65,10 +67,10 @@ AssetPanel::AssetPanel(QWidget *parent)
|
||||
m_switchCompoButton = new QComboBox(this);
|
||||
m_switchCompoButton->setFrame(false);
|
||||
auto allTransitions = TransitionsRepository::get()->getNames();
|
||||
for (const auto &transition : allTransitions) {
|
||||
for (const auto &transition : qAsConst(allTransitions)) {
|
||||
m_switchCompoButton->addItem(transition.second, transition.first);
|
||||
}
|
||||
connect(m_switchCompoButton, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), [&]() {
|
||||
connect(m_switchCompoButton, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, [&]() {
|
||||
if (m_transitionWidget->stackOwner().first == ObjectType::TimelineComposition) {
|
||||
emit switchCurrentComposition(m_transitionWidget->stackOwner().second, m_switchCompoButton->currentData().toString());
|
||||
}
|
||||
@@ -120,6 +122,7 @@ AssetPanel::AssetPanel(QWidget *parent)
|
||||
auto *lay = new QVBoxLayout(m_container);
|
||||
lay->setContentsMargins(0, 0, 0, 0);
|
||||
lay->addWidget(m_transitionWidget);
|
||||
lay->addWidget(m_mixWidget);
|
||||
lay->addWidget(m_effectStackWidget);
|
||||
m_sc = new QScrollArea;
|
||||
m_sc->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
|
||||
@@ -135,13 +138,15 @@ AssetPanel::AssetPanel(QWidget *parent)
|
||||
m_infoMessage->hide();
|
||||
m_sc->setWidget(m_container);
|
||||
m_transitionWidget->setVisible(false);
|
||||
m_mixWidget->setVisible(false);
|
||||
m_effectStackWidget->setVisible(false);
|
||||
updatePalette();
|
||||
connect(m_effectStackWidget, &EffectStackView::checkScrollBar, this, &AssetPanel::slotCheckWheelEventFilter);
|
||||
connect(m_effectStackWidget, &EffectStackView::scrollView, this, &AssetPanel::scrollTo);
|
||||
connect(m_effectStackWidget, &EffectStackView::seekToPos, this, &AssetPanel::seekToPos);
|
||||
connect(m_effectStackWidget, &EffectStackView::reloadEffect, this, &AssetPanel::reloadEffect);
|
||||
connect(m_transitionWidget, &TransitionStackView::seekToTransPos, this, &AssetPanel::seekToPos);
|
||||
connect(m_effectStackWidget, &EffectStackView::updateEnabledState, [this]() { m_enableStackButton->setActive(m_effectStackWidget->isStackEnabled()); });
|
||||
connect(m_effectStackWidget, &EffectStackView::updateEnabledState, this, [this]() { m_enableStackButton->setActive(m_effectStackWidget->isStackEnabled()); });
|
||||
}
|
||||
|
||||
void AssetPanel::showTransition(int tid, const std::shared_ptr<AssetParameterModel> &transitionModel)
|
||||
@@ -164,6 +169,28 @@ void AssetPanel::showTransition(int tid, const std::shared_ptr<AssetParameterMod
|
||||
m_transitionWidget->setModel(transitionModel, QSize(), true);
|
||||
}
|
||||
|
||||
void AssetPanel::showMix(int cid, const std::shared_ptr<AssetParameterModel> &transitionModel)
|
||||
{
|
||||
if (cid == -1) {
|
||||
clear();
|
||||
return;
|
||||
}
|
||||
ObjectId id = {ObjectType::TimelineMix, cid};
|
||||
if (m_mixWidget->stackOwner() == id) {
|
||||
// already on this effect stack, do nothing
|
||||
return;
|
||||
}
|
||||
clear();
|
||||
m_switchAction->setVisible(false);
|
||||
m_titleAction->setVisible(false);
|
||||
m_assetTitle->clear();
|
||||
m_mixWidget->setVisible(true);
|
||||
m_timelineButton->setVisible(false);
|
||||
m_enableStackButton->setVisible(false);
|
||||
m_mixWidget->setModel(transitionModel, QSize(), true);
|
||||
}
|
||||
|
||||
|
||||
void AssetPanel::showEffectStack(const QString &itemName, const std::shared_ptr<EffectStackModel> &effectsModel, QSize frameSize, bool showKeyframes)
|
||||
{
|
||||
if (effectsModel == nullptr) {
|
||||
@@ -217,7 +244,7 @@ void AssetPanel::showEffectStack(const QString &itemName, const std::shared_ptr<
|
||||
m_enableStackButton->setActive(effectsModel->isStackEnabled());
|
||||
if (showSplit) {
|
||||
m_splitButton->setEnabled(effectsModel->rowCount() > 0);
|
||||
QObject::connect(effectsModel.get(), &EffectStackModel::dataChanged, [&]() {
|
||||
QObject::connect(effectsModel.get(), &EffectStackModel::dataChanged, this, [&]() {
|
||||
if (m_effectStackWidget->isEmpty()) {
|
||||
m_splitButton->setActive(false);
|
||||
}
|
||||
@@ -259,11 +286,14 @@ void AssetPanel::clear()
|
||||
m_switchAction->setVisible(false);
|
||||
m_transitionWidget->setVisible(false);
|
||||
m_transitionWidget->unsetModel();
|
||||
m_mixWidget->setVisible(false);
|
||||
m_mixWidget->unsetModel();
|
||||
m_effectStackWidget->setVisible(false);
|
||||
m_splitButton->setVisible(false);
|
||||
m_timelineButton->setVisible(false);
|
||||
m_switchBuiltStack->setVisible(false);
|
||||
m_effectStackWidget->unsetModel();
|
||||
|
||||
m_assetTitle->setText(QString());
|
||||
}
|
||||
|
||||
@@ -394,7 +424,7 @@ void AssetPanel::enableStack(bool enable)
|
||||
void AssetPanel::deleteCurrentEffect()
|
||||
{
|
||||
if (m_effectStackWidget->isVisible()) {
|
||||
m_effectStackWidget->removeCurrentEffect();
|
||||
emit m_effectStackWidget->removeCurrentEffect();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -405,6 +435,13 @@ void AssetPanel::collapseCurrentEffect()
|
||||
}
|
||||
}
|
||||
|
||||
void AssetPanel::scrollTo(QRect rect)
|
||||
{
|
||||
// Ensure the scrollview widget adapted its height to the effectstackview height change
|
||||
m_sc->widget()->adjustSize();
|
||||
m_sc->ensureVisible(0, rect.y(), 0, rect.height());
|
||||
}
|
||||
|
||||
void AssetPanel::slotCheckWheelEventFilter()
|
||||
{
|
||||
// If the effect stack widget has no scrollbar, we will not filter the
|
||||
@@ -414,7 +451,7 @@ void AssetPanel::slotCheckWheelEventFilter()
|
||||
// widget has scroll bar,
|
||||
blockWheel = true;
|
||||
}
|
||||
m_effectStackWidget->blockWheenEvent(blockWheel);
|
||||
emit m_effectStackWidget->blockWheenEvent(blockWheel);
|
||||
}
|
||||
|
||||
void AssetPanel::assetPanelWarning(const QString service, const QString /*id*/, const QString message)
|
||||
|
||||
@@ -44,6 +44,7 @@ class AssetParameterView;
|
||||
class EffectStackModel;
|
||||
class EffectStackView;
|
||||
class TransitionStackView;
|
||||
class MixStackView;
|
||||
class QLabel;
|
||||
|
||||
class AssetPanel : public QWidget
|
||||
@@ -55,6 +56,8 @@ public:
|
||||
|
||||
/* @brief Shows the parameters of the given transition model */
|
||||
void showTransition(int tid, const std::shared_ptr<AssetParameterModel> &transition_model);
|
||||
/* @brief Shows the parameters of the given mix model */
|
||||
void showMix(int cid, const std::shared_ptr<AssetParameterModel> &transitionModel);
|
||||
|
||||
/* @brief Shows the parameters of the given effect stack model */
|
||||
void showEffectStack(const QString &itemName, const std::shared_ptr<EffectStackModel> &effectsModel, QSize frameSize, bool showKeyframes);
|
||||
@@ -85,6 +88,7 @@ protected:
|
||||
KSqueezedTextLabel *m_assetTitle;
|
||||
QWidget *m_container;
|
||||
TransitionStackView *m_transitionWidget;
|
||||
MixStackView *m_mixWidget;
|
||||
EffectStackView *m_effectStackWidget;
|
||||
|
||||
private:
|
||||
@@ -104,6 +108,8 @@ private slots:
|
||||
void showKeyframes(bool enable);
|
||||
/** Enable / disable effect stack */
|
||||
void enableStack(bool enable);
|
||||
/** Scroll effects view */
|
||||
void scrollTo(QRect rect);
|
||||
|
||||
signals:
|
||||
void doSplitEffect(bool);
|
||||
|
||||
@@ -51,9 +51,8 @@ void CornersHelper::slotUpdateFromMonitorData(const QVariantList &v)
|
||||
void CornersHelper::refreshParams(int pos)
|
||||
{
|
||||
QVariantList points{QPointF(), QPointF(), QPointF(), QPointF()};
|
||||
QList<double> coords;
|
||||
QSize frameSize = pCore->getCurrentFrameSize();
|
||||
for (const auto &ix : m_indexes) {
|
||||
for (const auto &ix : qAsConst(m_indexes)) {
|
||||
auto type = m_model->data(ix, AssetParameterModel::TypeRole).value<ParamType>();
|
||||
if (type != ParamType::KeyframeParam) {
|
||||
continue;
|
||||
|
||||
@@ -175,6 +175,8 @@ bool KeyframeModel::moveKeyframe(GenTime oldPos, GenTime pos, QVariant newVal, F
|
||||
return updateKeyframe(pos, result);
|
||||
}
|
||||
if (oldPos != pos && hasKeyframe(pos)) {
|
||||
// Move rejected, another keyframe is here
|
||||
qDebug()<<"==== MOVE REJECTED!!";
|
||||
return false;
|
||||
}
|
||||
KeyframeType oldType = m_keyframeList[oldPos].first;
|
||||
@@ -234,7 +236,7 @@ bool KeyframeModel::offsetKeyframes(int oldPos, int pos, bool logUndo)
|
||||
times << m.first;
|
||||
}
|
||||
bool res = true;
|
||||
for (const auto &t : times) {
|
||||
for (const auto &t : qAsConst(times)) {
|
||||
res &= moveKeyframe(t, t + diff, QVariant(), undo, redo);
|
||||
}
|
||||
if (res && logUndo) {
|
||||
@@ -296,16 +298,20 @@ bool KeyframeModel::updateKeyframe(int pos, double newVal)
|
||||
{
|
||||
GenTime Pos(pos, pCore->getCurrentFps());
|
||||
if (auto ptr = m_model.lock()) {
|
||||
double min = ptr->data(m_index, AssetParameterModel::MinRole).toDouble();
|
||||
double max = ptr->data(m_index, AssetParameterModel::MaxRole).toDouble();
|
||||
double min = ptr->data(m_index, AssetParameterModel::VisualMinRole).toDouble();
|
||||
double max = ptr->data(m_index, AssetParameterModel::VisualMaxRole).toDouble();
|
||||
if (qFuzzyIsNull(min) && qFuzzyIsNull(max)) {
|
||||
min = ptr->data(m_index, AssetParameterModel::MinRole).toDouble();
|
||||
max = ptr->data(m_index, AssetParameterModel::MaxRole).toDouble();
|
||||
}
|
||||
double factor = ptr->data(m_index, AssetParameterModel::FactorRole).toDouble();
|
||||
double norm = ptr->data(m_index, AssetParameterModel::DefaultRole).toDouble();
|
||||
int logRole = ptr->data(m_index, AssetParameterModel::ScaleRole).toInt();
|
||||
double realValue;
|
||||
if (logRole == -1) {
|
||||
// Logarythmic scale for lower than norm values
|
||||
// Logarythmic scale
|
||||
if (newVal >= 0.5) {
|
||||
realValue = norm + (2 * (newVal - 0.5) * (max / factor - norm));
|
||||
realValue = norm + pow(2 * (newVal - 0.5), 10.0 / 6) * (max / factor - norm);
|
||||
} else {
|
||||
realValue = norm - pow(2 * (0.5 - newVal), 10.0 / 6) * (norm - min / factor);
|
||||
}
|
||||
@@ -442,24 +448,33 @@ QVariant KeyframeModel::data(const QModelIndex &index, int role) const
|
||||
case NormalizedValueRole: {
|
||||
if (m_paramType == ParamType::AnimatedRect) {
|
||||
const QString &data = it->second.second.toString();
|
||||
QLocale locale;
|
||||
return locale.toDouble(data.section(QLatin1Char(' '), -1));
|
||||
bool ok;
|
||||
double converted = data.section(QLatin1Char(' '), -1).toDouble(&ok);
|
||||
if (!ok) {
|
||||
qDebug() << "QLocale: Could not convert animated rect opacity" << data;
|
||||
}
|
||||
return converted;
|
||||
}
|
||||
double val = it->second.second.toDouble();
|
||||
if (auto ptr = m_model.lock()) {
|
||||
Q_ASSERT(m_index.isValid());
|
||||
double min = ptr->data(m_index, AssetParameterModel::MinRole).toDouble();
|
||||
double max = ptr->data(m_index, AssetParameterModel::MaxRole).toDouble();
|
||||
double min = ptr->data(m_index, AssetParameterModel::VisualMinRole).toDouble();
|
||||
double max = ptr->data(m_index, AssetParameterModel::VisualMaxRole).toDouble();
|
||||
if (qFuzzyIsNull(min) && qFuzzyIsNull(max)) {
|
||||
min = ptr->data(m_index, AssetParameterModel::MinRole).toDouble();
|
||||
max = ptr->data(m_index, AssetParameterModel::MaxRole).toDouble();
|
||||
}
|
||||
double factor = ptr->data(m_index, AssetParameterModel::FactorRole).toDouble();
|
||||
double norm = ptr->data(m_index, AssetParameterModel::DefaultRole).toDouble();
|
||||
int logRole = ptr->data(m_index, AssetParameterModel::ScaleRole).toInt();
|
||||
double linear = val * factor;
|
||||
if (logRole == -1) {
|
||||
// Logarythmic scale for lower than norm values
|
||||
if (linear >= norm) {
|
||||
return 0.5 + (linear - norm) / (max * factor - norm) * 0.5;
|
||||
}
|
||||
// Logarythmic scale
|
||||
// transform current value to 0..1 scale
|
||||
if (linear >= norm) {
|
||||
double scaled = (linear - norm) / (max * factor - norm);
|
||||
return 0.5 + pow(scaled, 0.6) * 0.5;
|
||||
}
|
||||
double scaled = (linear - norm) / (min * factor - norm);
|
||||
// Log scale
|
||||
return 0.5 - pow(scaled, 0.6) * 0.5;
|
||||
@@ -713,7 +728,6 @@ void KeyframeModel::parseAnimProperty(const QString &prop)
|
||||
{
|
||||
Fun undo = []() { return true; };
|
||||
Fun redo = []() { return true; };
|
||||
QLocale locale;
|
||||
disconnect(this, &KeyframeModel::modelChanged, this, &KeyframeModel::sendModification);
|
||||
removeAllKeyframes(undo, redo);
|
||||
int in = 0;
|
||||
@@ -749,7 +763,7 @@ void KeyframeModel::parseAnimProperty(const QString &prop)
|
||||
case ParamType::AnimatedRect: {
|
||||
mlt_rect rect = mlt_prop.anim_get_rect("key", frame);
|
||||
if (useOpacity) {
|
||||
value = QVariant(QStringLiteral("%1 %2 %3 %4 %5").arg(rect.x).arg(rect.y).arg(rect.w).arg(rect.h).arg(locale.toString(rect.o)));
|
||||
value = QVariant(QStringLiteral("%1 %2 %3 %4 %5").arg(rect.x).arg(rect.y).arg(rect.w).arg(rect.h).arg(rect.o, 0, 'f'));
|
||||
} else {
|
||||
value = QVariant(QStringLiteral("%1 %2 %3 %4").arg(rect.x).arg(rect.y).arg(rect.w).arg(rect.h));
|
||||
}
|
||||
@@ -782,7 +796,6 @@ void KeyframeModel::resetAnimProperty(const QString &prop)
|
||||
removeAllKeyframes(undo, redo);
|
||||
|
||||
Mlt::Properties mlt_prop;
|
||||
QLocale locale;
|
||||
int in = 0;
|
||||
bool useOpacity = true;
|
||||
if (auto ptr = m_model.lock()) {
|
||||
@@ -812,7 +825,7 @@ void KeyframeModel::resetAnimProperty(const QString &prop)
|
||||
case ParamType::AnimatedRect: {
|
||||
mlt_rect rect = mlt_prop.anim_get_rect("key", frame);
|
||||
if (useOpacity) {
|
||||
value = QVariant(QStringLiteral("%1 %2 %3 %4 %5").arg(rect.x).arg(rect.y).arg(rect.w).arg(rect.h).arg(locale.toString(rect.o)));
|
||||
value = QVariant(QStringLiteral("%1 %2 %3 %4 %5").arg(rect.x).arg(rect.y).arg(rect.w).arg(rect.h).arg(QString::number(rect.o, 'f')));
|
||||
} else {
|
||||
value = QVariant(QStringLiteral("%1 %2 %3 %4").arg(rect.x).arg(rect.y).arg(rect.w).arg(rect.h));
|
||||
}
|
||||
@@ -858,7 +871,6 @@ void KeyframeModel::parseRotoProperty(const QString &prop)
|
||||
QJsonDocument doc = QJsonDocument::fromJson(prop.toLatin1(), &jsonError);
|
||||
QVariant data = doc.toVariant();
|
||||
if (data.canConvert(QVariant::Map)) {
|
||||
QList<int> keyframes;
|
||||
QMap<QString, QVariant> map = data.toMap();
|
||||
QMap<QString, QVariant>::const_iterator i = map.constBegin();
|
||||
while (i != map.constEnd()) {
|
||||
@@ -877,10 +889,8 @@ QVariant KeyframeModel::getInterpolatedValue(int p) const
|
||||
QVariant KeyframeModel::updateInterpolated(const QVariant &interpValue, double val)
|
||||
{
|
||||
QStringList vals = interpValue.toString().split(QLatin1Char(' '));
|
||||
QLocale locale;
|
||||
locale.setNumberOptions(QLocale::OmitGroupSeparator);
|
||||
if (!vals.isEmpty()) {
|
||||
vals[vals.size() - 1] = locale.toString(val);
|
||||
vals[vals.size() - 1] = QString::number(val, 'f');
|
||||
}
|
||||
return vals.join(QLatin1Char(' '));
|
||||
}
|
||||
@@ -888,16 +898,20 @@ QVariant KeyframeModel::updateInterpolated(const QVariant &interpValue, double v
|
||||
QVariant KeyframeModel::getNormalizedValue(double newVal) const
|
||||
{
|
||||
if (auto ptr = m_model.lock()) {
|
||||
double min = ptr->data(m_index, AssetParameterModel::MinRole).toDouble();
|
||||
double max = ptr->data(m_index, AssetParameterModel::MaxRole).toDouble();
|
||||
double min = ptr->data(m_index, AssetParameterModel::VisualMinRole).toDouble();
|
||||
double max = ptr->data(m_index, AssetParameterModel::VisualMaxRole).toDouble();
|
||||
if (qFuzzyIsNull(min) && qFuzzyIsNull(max)) {
|
||||
min = ptr->data(m_index, AssetParameterModel::MinRole).toDouble();
|
||||
max = ptr->data(m_index, AssetParameterModel::MaxRole).toDouble();
|
||||
}
|
||||
double factor = ptr->data(m_index, AssetParameterModel::FactorRole).toDouble();
|
||||
double norm = ptr->data(m_index, AssetParameterModel::DefaultRole).toDouble();
|
||||
int logRole = ptr->data(m_index, AssetParameterModel::ScaleRole).toInt();
|
||||
double realValue;
|
||||
if (logRole == -1) {
|
||||
// Logarythmic scale for lower than norm values
|
||||
// Logarythmic scale
|
||||
if (newVal >= 0.5) {
|
||||
realValue = norm + (2 * (newVal - 0.5) * (max / factor - norm));
|
||||
realValue = norm + pow(2 * (newVal - 0.5), 10.0 / 6) * (max / factor - norm);
|
||||
} else {
|
||||
realValue = norm - pow(2 * (0.5 - newVal), 10.0 / 6) * (norm - min / factor);
|
||||
}
|
||||
@@ -917,76 +931,51 @@ QVariant KeyframeModel::getInterpolatedValue(const GenTime &pos) const
|
||||
if (m_keyframeList.size() == 0) {
|
||||
return QVariant();
|
||||
}
|
||||
auto next = m_keyframeList.upper_bound(pos);
|
||||
if (next == m_keyframeList.cbegin()) {
|
||||
return (m_keyframeList.cbegin())->second.second;
|
||||
} else if (next == m_keyframeList.cend()) {
|
||||
auto it = m_keyframeList.cend();
|
||||
--it;
|
||||
return it->second.second;
|
||||
}
|
||||
auto prev = next;
|
||||
--prev;
|
||||
// We now have surrounding keyframes, we use mlt to compute the value
|
||||
Mlt::Properties prop;
|
||||
bool useOpacity = true;
|
||||
Mlt::Properties mlt_prop;
|
||||
QString animData;
|
||||
int out = 0;
|
||||
bool useOpacity = false;
|
||||
if (auto ptr = m_model.lock()) {
|
||||
ptr->passProperties(prop);
|
||||
if (m_paramType == ParamType::AnimatedRect) {
|
||||
useOpacity = ptr->data(m_index, AssetParameterModel::OpacityRole).toBool();
|
||||
}
|
||||
ptr->passProperties(mlt_prop);
|
||||
ptr->data(m_index, AssetParameterModel::ParentInRole).toInt();
|
||||
out = ptr->data(m_index, AssetParameterModel::ParentDurationRole).toInt();
|
||||
useOpacity = ptr->data(m_index, AssetParameterModel::OpacityRole).toBool();
|
||||
animData = ptr->data(m_index, AssetParameterModel::ValueRole).toString();
|
||||
}
|
||||
QLocale locale;
|
||||
int p = pos.frames(pCore->getCurrentFps());
|
||||
if (m_paramType == ParamType::KeyframeParam) {
|
||||
prop.anim_set("keyframe", prev->second.second.toDouble(), prev->first.frames(pCore->getCurrentFps()), next->first.frames(pCore->getCurrentFps()),
|
||||
convertToMltType(prev->second.first));
|
||||
prop.anim_set("keyframe", next->second.second.toDouble(), next->first.frames(pCore->getCurrentFps()), next->first.frames(pCore->getCurrentFps()),
|
||||
convertToMltType(next->second.first));
|
||||
return QVariant(prop.anim_get_double("keyframe", p));
|
||||
if (!animData.isEmpty()) {
|
||||
mlt_prop.set("key", animData.toUtf8().constData());
|
||||
// This is a fake query to force the animation to be parsed
|
||||
(void)mlt_prop.anim_get_double("key", 0, out);
|
||||
return QVariant(mlt_prop.anim_get_double("key", pos.frames(pCore->getCurrentFps())));
|
||||
}
|
||||
return QVariant();
|
||||
} else if (m_paramType == ParamType::AnimatedRect) {
|
||||
QStringList vals = prev->second.second.toString().split(QLatin1Char(' '));
|
||||
if (vals.count() >= 4) {
|
||||
mlt_rect rect;
|
||||
rect.x = vals.at(0).toInt();
|
||||
rect.y = vals.at(1).toInt();
|
||||
rect.w = vals.at(2).toInt();
|
||||
rect.h = vals.at(3).toInt();
|
||||
if (!animData.isEmpty()) {
|
||||
mlt_prop.set("key", animData.toUtf8().constData());
|
||||
// This is a fake query to force the animation to be parsed
|
||||
(void)mlt_prop.anim_get_double("key", 0, out);
|
||||
mlt_rect rect = mlt_prop.anim_get_rect("key", pos.frames(pCore->getCurrentFps()));
|
||||
QString res = QStringLiteral("%1 %2 %3 %4").arg((int)rect.x).arg((int)rect.y).arg((int)rect.w).arg((int)rect.h);
|
||||
if (useOpacity) {
|
||||
if (vals.count()) {
|
||||
rect.o = locale.toDouble(vals.at(4));
|
||||
} else {
|
||||
rect.o = 1;
|
||||
}
|
||||
res.append(QStringLiteral(" %1").arg(QString::number(rect.o, 'f')));
|
||||
}
|
||||
prop.anim_set("keyframe", rect, prev->first.frames(pCore->getCurrentFps()), next->first.frames(pCore->getCurrentFps()),
|
||||
convertToMltType(prev->second.first));
|
||||
return QVariant(res);
|
||||
}
|
||||
vals = next->second.second.toString().split(QLatin1Char(' '));
|
||||
if (vals.count() >= 4) {
|
||||
mlt_rect rect;
|
||||
rect.x = vals.at(0).toInt();
|
||||
rect.y = vals.at(1).toInt();
|
||||
rect.w = vals.at(2).toInt();
|
||||
rect.h = vals.at(3).toInt();
|
||||
if (useOpacity) {
|
||||
if (vals.count() > 4) {
|
||||
rect.o = locale.toDouble(vals.at(4));
|
||||
} else {
|
||||
rect.o = 1;
|
||||
}
|
||||
}
|
||||
prop.anim_set("keyframe", rect, next->first.frames(pCore->getCurrentFps()), next->first.frames(pCore->getCurrentFps()),
|
||||
convertToMltType(next->second.first));
|
||||
}
|
||||
mlt_rect rect = prop.anim_get_rect("keyframe", p);
|
||||
QString res = QStringLiteral("%1 %2 %3 %4").arg((int)rect.x).arg((int)rect.y).arg((int)rect.w).arg((int)rect.h);
|
||||
if (useOpacity) {
|
||||
res.append(QStringLiteral(" %1").arg(locale.toString(rect.o)));
|
||||
}
|
||||
return QVariant(res);
|
||||
return QVariant();
|
||||
} else if (m_paramType == ParamType::Roto_spline) {
|
||||
// interpolate
|
||||
auto next = m_keyframeList.upper_bound(pos);
|
||||
if (next == m_keyframeList.cbegin()) {
|
||||
return (m_keyframeList.cbegin())->second.second;
|
||||
} else if (next == m_keyframeList.cend()) {
|
||||
auto it = m_keyframeList.cend();
|
||||
--it;
|
||||
return it->second.second;
|
||||
}
|
||||
auto prev = next;
|
||||
--prev;
|
||||
|
||||
QSize frame = pCore->getCurrentFrameSize();
|
||||
QList<BPoint> p1 = RotoHelper::getPoints(prev->second.second, frame);
|
||||
QList<BPoint> p2 = RotoHelper::getPoints(next->second.second, frame);
|
||||
@@ -995,7 +984,7 @@ QVariant KeyframeModel::getInterpolatedValue(const GenTime &pos) const
|
||||
// - equal to 1 on next keyframe
|
||||
qreal relPos = 0;
|
||||
if (next->first != prev->first) {
|
||||
relPos = (p - prev->first.frames(pCore->getCurrentFps())) / (qreal)(((next->first - prev->first).frames(pCore->getCurrentFps())));
|
||||
relPos = (pos.frames(pCore->getCurrentFps()) - prev->first.frames(pCore->getCurrentFps())) / (qreal)(((next->first - prev->first).frames(pCore->getCurrentFps())));
|
||||
}
|
||||
int count = qMin(p1.count(), p2.count());
|
||||
QList<QVariant> vlist;
|
||||
|
||||
@@ -49,6 +49,22 @@ ObjectId KeyframeModelList::getOwnerId() const
|
||||
return {};
|
||||
}
|
||||
|
||||
const QString KeyframeModelList::getAssetId()
|
||||
{
|
||||
if (auto ptr = m_model.lock()) {
|
||||
return ptr->getAssetId();
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
const QString KeyframeModelList::getAssetRow()
|
||||
{
|
||||
if (auto ptr = m_model.lock()) {
|
||||
return ptr->getAssetMltId();
|
||||
}
|
||||
return QString();
|
||||
}
|
||||
|
||||
void KeyframeModelList::addParameter(const QModelIndex &index)
|
||||
{
|
||||
std::shared_ptr<KeyframeModel> parameter(new KeyframeModel(m_model, index, m_undoStack));
|
||||
@@ -262,6 +278,14 @@ bool KeyframeModelList::isEmpty() const
|
||||
return (m_parameters.size() == 0 || m_parameters.begin()->second->rowCount() == 0);
|
||||
}
|
||||
|
||||
int KeyframeModelList::count() const
|
||||
{
|
||||
READ_LOCK();
|
||||
if (m_parameters.size() > 0)
|
||||
return m_parameters.begin()->second->rowCount();
|
||||
return 0;
|
||||
}
|
||||
|
||||
Keyframe KeyframeModelList::getNextKeyframe(const GenTime &pos, bool *ok) const
|
||||
{
|
||||
READ_LOCK();
|
||||
@@ -355,7 +379,7 @@ void KeyframeModelList::resizeKeyframes(int oldIn, int oldOut, int in, int out,
|
||||
QVariant value = param.second->getInterpolatedValue(new_in);
|
||||
param.second->updateKeyframe(old_in, value, undo, redo);
|
||||
}
|
||||
for (auto frame : positions) {
|
||||
for (auto frame : qAsConst(positions)) {
|
||||
if (new_in > GenTime()) {
|
||||
if (frame > new_in) {
|
||||
param.second->moveKeyframe(frame, frame - new_in, QVariant(), undo, redo);
|
||||
@@ -447,7 +471,7 @@ void KeyframeModelList::resizeKeyframes(int oldIn, int oldOut, int in, int out,
|
||||
for (const auto ¶m : m_parameters) {
|
||||
QVariant value = param.second->getInterpolatedValue(new_out);
|
||||
param.second->addKeyframe(new_out, type, value, true, undo, redo);
|
||||
for (auto frame : positions) {
|
||||
for (auto frame : qAsConst(positions)) {
|
||||
param.second->removeKeyframe(frame, undo, redo);
|
||||
}
|
||||
}
|
||||
@@ -485,3 +509,13 @@ void KeyframeModelList::checkConsistency()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GenTime KeyframeModelList::getPosAtIndex(int ix)
|
||||
{
|
||||
QList<GenTime> positions = m_parameters.begin()->second->getKeyframePos();
|
||||
std::sort(positions.begin(), positions.end());
|
||||
if (ix < 0 || ix >= positions.count()) {
|
||||
return GenTime();
|
||||
}
|
||||
return positions.at(ix);
|
||||
}
|
||||
|
||||
@@ -96,6 +96,9 @@ public:
|
||||
/* @brief Returns true if we only have no keyframe
|
||||
*/
|
||||
bool isEmpty() const;
|
||||
/* @brief Returns the number of keyframes
|
||||
*/
|
||||
int count() const;
|
||||
|
||||
/* @brief Returns the keyframe located after given position.
|
||||
If there is a keyframe at given position it is ignored.
|
||||
@@ -132,10 +135,16 @@ public:
|
||||
KeyframeModel *getKeyModel(const QPersistentModelIndex &index);
|
||||
/** @brief Returns parent asset owner id*/
|
||||
ObjectId getOwnerId() const;
|
||||
/** @brief Returns parent asset id*/
|
||||
const QString getAssetId();
|
||||
const QString getAssetRow();
|
||||
|
||||
/** @brief Parent item size change, update keyframes*/
|
||||
void resizeKeyframes(int oldIn, int oldOut, int in, int out, int offset, bool adjustFromEnd, Fun &undo, Fun &redo);
|
||||
|
||||
/** @brief Return position of the nth keyframe (ix = nth)*/
|
||||
GenTime getPosAtIndex(int ix);
|
||||
|
||||
/** @brief Check that all keyframable parameters have the same keyframes on loading
|
||||
* (that's how our model works) */
|
||||
void checkConsistency();
|
||||
|
||||
@@ -21,9 +21,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "keyframemonitorhelper.hpp"
|
||||
#include "assets/model/assetparametermodel.hpp"
|
||||
#include "assets/keyframes/model/keyframemodellist.hpp"
|
||||
#include "monitor/monitor.h"
|
||||
|
||||
#include <utility>
|
||||
#include <core.h>
|
||||
KeyframeMonitorHelper::KeyframeMonitorHelper(Monitor *monitor, std::shared_ptr<AssetParameterModel> model, const QPersistentModelIndex &index, QObject *parent)
|
||||
: QObject(parent)
|
||||
, m_monitor(monitor)
|
||||
@@ -36,7 +38,7 @@ KeyframeMonitorHelper::KeyframeMonitorHelper(Monitor *monitor, std::shared_ptr<A
|
||||
bool KeyframeMonitorHelper::connectMonitor(bool activate)
|
||||
{
|
||||
if (activate == m_active) {
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
m_active = activate;
|
||||
if (activate) {
|
||||
@@ -52,3 +54,80 @@ void KeyframeMonitorHelper::addIndex(const QPersistentModelIndex &index)
|
||||
{
|
||||
m_indexes << index;
|
||||
}
|
||||
|
||||
void KeyframeMonitorHelper::refreshParams(int /* pos */ )
|
||||
{
|
||||
QVariantList points;
|
||||
QVariantList types;
|
||||
std::shared_ptr<KeyframeModelList> keyframes = m_model->getKeyframeModel();
|
||||
for (const auto &ix : qAsConst(m_indexes)) {
|
||||
auto type = m_model->data(ix, AssetParameterModel::TypeRole).value<ParamType>();
|
||||
if (type != ParamType::AnimatedRect) {
|
||||
continue;
|
||||
}
|
||||
KeyframeModel *kfr = keyframes->getKeyModel(ix);
|
||||
bool ok;
|
||||
Keyframe kf = kfr->getNextKeyframe(GenTime(-1), &ok);
|
||||
while (ok) {
|
||||
if (kf.second == KeyframeType::Curve) {
|
||||
types << 1;
|
||||
} else {
|
||||
types << 0;
|
||||
}
|
||||
QString rectData = kfr->getInterpolatedValue(kf.first).toString();
|
||||
QStringList data = rectData.split(QLatin1Char(' '));
|
||||
if (data.size() > 3) {
|
||||
QRectF r(data.at(0).toInt(), data.at(1).toInt(), data.at(2).toInt(), data.at(3).toInt());
|
||||
points.append(QVariant(r.center()));
|
||||
}
|
||||
kf = kfr->getNextKeyframe(kf.first, &ok);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (m_monitor) {
|
||||
m_monitor->setUpEffectGeometry(QRect(), points, types);
|
||||
}
|
||||
}
|
||||
|
||||
void KeyframeMonitorHelper::slotUpdateFromMonitorData(const QVariantList ¢ers)
|
||||
{
|
||||
std::shared_ptr<KeyframeModelList> keyframes = m_model->getKeyframeModel();
|
||||
if (centers.count() != keyframes->count()) {
|
||||
qDebug() << "* * * *CENTER POINTS MISMATCH, aborting edit";
|
||||
return;
|
||||
}
|
||||
for (const auto &ix : qAsConst(m_indexes)) {
|
||||
auto type = m_model->data(ix, AssetParameterModel::TypeRole).value<ParamType>();
|
||||
if (type != ParamType::AnimatedRect) {
|
||||
continue;
|
||||
}
|
||||
|
||||
KeyframeModel *kfr = keyframes->getKeyModel(ix);
|
||||
bool ok;
|
||||
Keyframe kf = kfr->getNextKeyframe(GenTime(-1), &ok);
|
||||
int i = 0;
|
||||
while (ok) {
|
||||
QString rectData = kfr->getInterpolatedValue(kf.first).toString();
|
||||
QStringList data = rectData.split(QLatin1Char(' '));
|
||||
if (data.size() > 3) {
|
||||
QRectF r(data.at(0).toInt(), data.at(1).toInt(), data.at(2).toInt(), data.at(3).toInt());
|
||||
QPointF pt(r.center());
|
||||
QPointF expected = centers.at(i).toPointF();
|
||||
if (pt != expected) {
|
||||
// Center rect to new pos
|
||||
QPointF offset = expected - pt;
|
||||
r.translate(offset);
|
||||
QString res = QString("%1 %2 %3 %4").arg((int)r.x()).arg((int)r.y()).arg((int)r.width()).arg((int)r.height());
|
||||
if (data.size() > 4) {
|
||||
res.append(QString(" %1").arg(data.at(4)));
|
||||
}
|
||||
kfr->updateKeyframe(kf.first, res);
|
||||
}
|
||||
}
|
||||
kf = kfr->getNextKeyframe(kf.first, &ok);
|
||||
i++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ public:
|
||||
bool connectMonitor(bool activate);
|
||||
/** @brief Send data update to the monitor
|
||||
*/
|
||||
virtual void refreshParams(int pos) = 0;
|
||||
virtual void refreshParams(int pos);
|
||||
|
||||
protected:
|
||||
Monitor *m_monitor;
|
||||
@@ -64,7 +64,7 @@ protected:
|
||||
bool m_active;
|
||||
|
||||
private slots:
|
||||
virtual void slotUpdateFromMonitorData(const QVariantList &v) = 0;
|
||||
virtual void slotUpdateFromMonitorData(const QVariantList &v);
|
||||
|
||||
public slots:
|
||||
/** @brief For classes that manage several parameters, add a param index to the list
|
||||
|
||||
@@ -65,14 +65,14 @@ void RotoHelper::refreshParams(int pos)
|
||||
if (!keyframes->isEmpty()) {
|
||||
QVariant splineData = keyframes->getInterpolatedValue(pos, m_indexes.first());
|
||||
QList<BPoint> p = getPoints(splineData, pCore->getCurrentFrameSize());
|
||||
for (const auto &i : p) {
|
||||
for (const auto &i : qAsConst(p)) {
|
||||
centerPoints << QVariant(i.p);
|
||||
controlPoints << QVariant(i.h1);
|
||||
controlPoints << QVariant(i.h2);
|
||||
}
|
||||
if (m_monitor) {
|
||||
m_monitor->setUpEffectGeometry(QRect(), centerPoints, controlPoints);
|
||||
}
|
||||
}
|
||||
if (m_monitor) {
|
||||
m_monitor->setUpEffectGeometry(QRect(), centerPoints, controlPoints);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <QMouseEvent>
|
||||
#include <QApplication>
|
||||
#include <QStylePainter>
|
||||
#include <QtMath>
|
||||
|
||||
#include <KColorScheme>
|
||||
#include <QFontDatabase>
|
||||
@@ -39,6 +40,8 @@ KeyframeView::KeyframeView(std::shared_ptr<KeyframeModelList> model, int duratio
|
||||
, m_currentKeyframeOriginal(-1)
|
||||
, m_hoverKeyframe(-1)
|
||||
, m_scale(1)
|
||||
, m_zoomFactor(1)
|
||||
, m_zoomStart(0)
|
||||
, m_zoomHandle(0,1)
|
||||
, m_hoverZoomIn(false)
|
||||
, m_hoverZoomOut(false)
|
||||
@@ -80,6 +83,18 @@ void KeyframeView::slotSetPosition(int pos, bool isInRange)
|
||||
m_position = pos;
|
||||
int offset = pCore->getItemIn(m_model->getOwnerId());
|
||||
emit atKeyframe(m_model->hasKeyframe(pos + offset), m_model->singleKeyframe());
|
||||
double zoomPos = (double) m_position / m_duration;
|
||||
if (zoomPos < m_zoomHandle.x()) {
|
||||
double interval = m_zoomHandle.y() - m_zoomHandle.x();
|
||||
zoomPos = qBound(0.0, zoomPos - interval / 5, 1.0);
|
||||
m_zoomHandle.setX(zoomPos);
|
||||
m_zoomHandle.setY(zoomPos + interval);
|
||||
} else if (zoomPos > m_zoomHandle.y()) {
|
||||
double interval = m_zoomHandle.y() - m_zoomHandle.x();
|
||||
zoomPos = qBound(0.0, zoomPos + interval / 5, 1.0);
|
||||
m_zoomHandle.setX(zoomPos - interval);
|
||||
m_zoomHandle.setY(zoomPos);
|
||||
}
|
||||
update();
|
||||
}
|
||||
}
|
||||
@@ -98,15 +113,20 @@ void KeyframeView::slotAddKeyframe(int pos)
|
||||
m_model->addKeyframe(GenTime(pos + offset, pCore->getCurrentFps()), (KeyframeType)KdenliveSettings::defaultkeyframeinterp());
|
||||
}
|
||||
|
||||
const QString KeyframeView::getAssetId()
|
||||
{
|
||||
return m_model->getAssetId();
|
||||
}
|
||||
|
||||
void KeyframeView::slotAddRemove()
|
||||
{
|
||||
emit activateEffect();
|
||||
int offset = pCore->getItemIn(m_model->getOwnerId());
|
||||
if (m_model->hasKeyframe(m_position + offset)) {
|
||||
slotRemoveKeyframe(m_position);
|
||||
} else {
|
||||
slotAddKeyframe(m_position);
|
||||
}
|
||||
emit activateEffect();
|
||||
}
|
||||
|
||||
void KeyframeView::slotEditType(int type, const QPersistentModelIndex &index)
|
||||
@@ -119,6 +139,11 @@ void KeyframeView::slotEditType(int type, const QPersistentModelIndex &index)
|
||||
|
||||
void KeyframeView::slotRemoveKeyframe(int pos)
|
||||
{
|
||||
if (m_model->singleKeyframe()) {
|
||||
// Don't allow zero keyframe
|
||||
pCore->displayMessage(i18n("Cannot remove the last keyframe"), MessageType::InformationMessage, 500);
|
||||
return;
|
||||
}
|
||||
if (pos < 0) {
|
||||
pos = m_position;
|
||||
}
|
||||
@@ -136,6 +161,7 @@ void KeyframeView::setDuration(int dur)
|
||||
|
||||
void KeyframeView::slotGoToNext()
|
||||
{
|
||||
emit activateEffect();
|
||||
if (m_position == m_duration - 1) {
|
||||
return;
|
||||
}
|
||||
@@ -150,11 +176,11 @@ void KeyframeView::slotGoToNext()
|
||||
// no keyframe after current position
|
||||
emit seekToPos(m_duration - 1);
|
||||
}
|
||||
emit activateEffect();
|
||||
}
|
||||
|
||||
void KeyframeView::slotGoToPrev()
|
||||
{
|
||||
emit activateEffect();
|
||||
if (m_position == 0) {
|
||||
return;
|
||||
}
|
||||
@@ -169,7 +195,6 @@ void KeyframeView::slotGoToPrev()
|
||||
// no keyframe after current position
|
||||
emit seekToPos(m_duration - 1);
|
||||
}
|
||||
emit activateEffect();
|
||||
}
|
||||
|
||||
void KeyframeView::mousePressEvent(QMouseEvent *event)
|
||||
@@ -182,12 +207,12 @@ void KeyframeView::mousePressEvent(QMouseEvent *event)
|
||||
int pos = ((event->x() - m_offset) / zoomFactor + zoomStart ) / m_scale;
|
||||
pos = qBound(0, pos, m_duration - 1);
|
||||
if (event->button() == Qt::LeftButton) {
|
||||
if (event->y() < m_lineHeight) {
|
||||
if (event->y() < m_lineHeight) {
|
||||
// mouse click in keyframes area
|
||||
bool ok;
|
||||
GenTime position(pos + offset, pCore->getCurrentFps());
|
||||
auto keyframe = m_model->getClosestKeyframe(position, &ok);
|
||||
if (ok && qAbs(keyframe.first.frames(pCore->getCurrentFps()) - pos - offset) * m_scale < ceil(m_lineHeight / 1.5)) {
|
||||
if (ok && qAbs(keyframe.first.frames(pCore->getCurrentFps()) - pos - offset) * m_scale * m_zoomFactor < QApplication::startDragDistance()) {
|
||||
m_currentKeyframeOriginal = keyframe.first.frames(pCore->getCurrentFps()) - offset;
|
||||
// Select and seek to keyframe
|
||||
m_currentKeyframe = m_currentKeyframeOriginal;
|
||||
@@ -236,12 +261,12 @@ void KeyframeView::mouseMoveEvent(QMouseEvent *event)
|
||||
if (m_hoverZoomIn || m_hoverZoomOut || m_hoverZoom) {
|
||||
// Moving zoom handles
|
||||
if (m_hoverZoomIn) {
|
||||
m_zoomHandle.setX(qMax(0., (double)(event->x() - m_offset) / (width() - 2 * m_offset)));
|
||||
m_zoomHandle.setX(qMin(qMax(0., (double)(event->x() - m_offset) / (width() - 2 * m_offset)), m_zoomHandle.y() - 0.015));
|
||||
update();
|
||||
return;
|
||||
}
|
||||
if (m_hoverZoomOut) {
|
||||
m_zoomHandle.setY(qMin(1., (double)(event->x() - m_offset) / (width() - 2 * m_offset)));
|
||||
m_zoomHandle.setY(qMax(qMin(1., (double)(event->x() - m_offset) / (width() - 2 * m_offset)), m_zoomHandle.x() + 0.015));
|
||||
update();
|
||||
return;
|
||||
}
|
||||
@@ -282,7 +307,7 @@ void KeyframeView::mouseMoveEvent(QMouseEvent *event)
|
||||
if (event->y() < m_lineHeight) {
|
||||
bool ok;
|
||||
auto keyframe = m_model->getClosestKeyframe(position, &ok);
|
||||
if (ok && qAbs(keyframe.first.frames(pCore->getCurrentFps()) - pos - offset) * m_scale < ceil(m_lineHeight / 1.5)) {
|
||||
if (ok && qAbs(keyframe.first.frames(pCore->getCurrentFps()) - pos - offset) * m_scale * m_zoomFactor < QApplication::startDragDistance()) {
|
||||
m_hoverKeyframe = keyframe.first.frames(pCore->getCurrentFps()) - offset;
|
||||
setCursor(Qt::PointingHandCursor);
|
||||
m_hoverZoomIn = false;
|
||||
@@ -355,7 +380,7 @@ void KeyframeView::mouseDoubleClickEvent(QMouseEvent *event)
|
||||
GenTime position(pos + offset, pCore->getCurrentFps());
|
||||
bool ok;
|
||||
auto keyframe = m_model->getClosestKeyframe(position, &ok);
|
||||
if (ok && qAbs(keyframe.first.frames(pCore->getCurrentFps()) - pos - offset) * m_scale < ceil(m_lineHeight / 1.5)) {
|
||||
if (ok && qAbs(keyframe.first.frames(pCore->getCurrentFps()) - pos - offset)* m_scale * m_zoomFactor < QApplication::startDragDistance()) {
|
||||
if (keyframe.first.frames(pCore->getCurrentFps()) != offset) {
|
||||
m_model->removeKeyframe(keyframe.first);
|
||||
if (keyframe.first.frames(pCore->getCurrentFps()) == m_currentKeyframe + offset) {
|
||||
@@ -395,31 +420,78 @@ void KeyframeView::paintEvent(QPaintEvent *event)
|
||||
Q_UNUSED(event)
|
||||
|
||||
QStylePainter p(this);
|
||||
m_scale = (width() - 2 * m_offset) / (double)(m_duration - 1);
|
||||
// p.translate(0, m_lineHeight);
|
||||
int maxWidth = width() - 2 * m_offset;
|
||||
m_scale = maxWidth / (double)(m_duration - 1);
|
||||
int headOffset = m_lineHeight / 2;
|
||||
int offset = pCore->getItemIn(m_model->getOwnerId());
|
||||
double zoomStart = m_zoomHandle.x() * (width() - 2 * m_offset);
|
||||
double zoomEnd = m_zoomHandle.y() * (width() - 2 * m_offset);
|
||||
double zoomFactor = (width() - 2 * m_offset) / (zoomEnd - zoomStart);
|
||||
m_zoomStart = m_zoomHandle.x() * maxWidth;
|
||||
m_zoomFactor = maxWidth / (m_zoomHandle.y() * maxWidth - m_zoomStart);
|
||||
int zoomEnd = qCeil(m_zoomHandle.y() * maxWidth);
|
||||
/* ticks */
|
||||
double fps = pCore->getCurrentFps();
|
||||
int displayedLength = m_duration / m_zoomFactor / fps;
|
||||
double factor = 1;
|
||||
if (displayedLength < 2) {
|
||||
// 1 frame tick
|
||||
} else if (displayedLength < 30 ) {
|
||||
// 1 sec tick
|
||||
factor = fps;
|
||||
} else if (displayedLength < 150) {
|
||||
// 5 sec tick
|
||||
factor = 5 * fps;
|
||||
} else if (displayedLength < 300) {
|
||||
// 10 sec tick
|
||||
factor = 10 * fps;
|
||||
} else if (displayedLength < 900) {
|
||||
// 30 sec tick
|
||||
factor = 30 * fps;
|
||||
} else if (displayedLength < 1800) {
|
||||
// 1 min. tick
|
||||
factor = 60 * fps;
|
||||
} else if (displayedLength < 9000) {
|
||||
// 5 min tick
|
||||
factor = 300 * fps;
|
||||
} else if (displayedLength < 18000) {
|
||||
// 10 min tick
|
||||
factor = 600 * fps;
|
||||
} else {
|
||||
// 30 min tick
|
||||
factor = 1800 * fps;
|
||||
}
|
||||
|
||||
// Position of left border in frames
|
||||
double tickOffset = m_zoomStart * m_zoomFactor;
|
||||
double frameSize = factor * m_scale * m_zoomFactor;
|
||||
int base = tickOffset / frameSize;
|
||||
tickOffset = frameSize - (tickOffset - (base * frameSize));
|
||||
// Draw frame ticks
|
||||
int scaledTick = 0;
|
||||
for (int i = 0; i < maxWidth / frameSize; i++) {
|
||||
scaledTick = m_offset + (i * frameSize) + tickOffset;
|
||||
if (scaledTick >= maxWidth + m_offset) {
|
||||
break;
|
||||
}
|
||||
p.drawLine(QPointF(scaledTick , m_lineHeight + 1), QPointF(scaledTick, m_lineHeight - 3));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* keyframes
|
||||
*/
|
||||
for (const auto &keyframe : *m_model.get()) {
|
||||
int pos = keyframe.first.frames(pCore->getCurrentFps()) - offset;
|
||||
int pos = keyframe.first.frames(fps) - offset;
|
||||
if (pos < 0) continue;
|
||||
double scaledPos = pos * m_scale;
|
||||
if (scaledPos < m_zoomStart || qFloor(scaledPos) > zoomEnd) {
|
||||
continue;
|
||||
}
|
||||
if (pos == m_currentKeyframe || pos == m_hoverKeyframe) {
|
||||
p.setBrush(m_colSelected);
|
||||
} else {
|
||||
p.setBrush(m_colKeyframe);
|
||||
}
|
||||
double scaledPos = pos * m_scale;
|
||||
if (scaledPos < zoomStart || scaledPos > zoomEnd) {
|
||||
continue;
|
||||
}
|
||||
scaledPos -= zoomStart;
|
||||
scaledPos *= zoomFactor;
|
||||
scaledPos -= m_zoomStart;
|
||||
scaledPos *= m_zoomFactor;
|
||||
scaledPos += m_offset;
|
||||
p.drawLine(QPointF(scaledPos, headOffset), QPointF(scaledPos, m_lineHeight - 1));
|
||||
switch (keyframe.second.first) {
|
||||
@@ -440,7 +512,7 @@ void KeyframeView::paintEvent(QPaintEvent *event)
|
||||
}
|
||||
|
||||
p.setPen(palette().dark().color());
|
||||
|
||||
|
||||
/*
|
||||
* Time-"line"
|
||||
*/
|
||||
@@ -454,9 +526,9 @@ void KeyframeView::paintEvent(QPaintEvent *event)
|
||||
*/
|
||||
if (m_position >= 0 && m_position < m_duration) {
|
||||
double scaledPos = m_position * m_scale;
|
||||
if (scaledPos >= zoomStart && scaledPos <= zoomEnd) {
|
||||
scaledPos -= zoomStart;
|
||||
scaledPos *= zoomFactor;
|
||||
if (scaledPos >= m_zoomStart && qFloor(scaledPos) <= zoomEnd) {
|
||||
scaledPos -= m_zoomStart;
|
||||
scaledPos *= m_zoomFactor;
|
||||
scaledPos += m_offset;
|
||||
QPolygon pa(3);
|
||||
int cursorwidth = (m_zoomHeight - m_lineHeight) / 1.8;
|
||||
@@ -466,7 +538,7 @@ void KeyframeView::paintEvent(QPaintEvent *event)
|
||||
p.drawPolygon(position);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Zoom bar
|
||||
p.setPen(Qt::NoPen);
|
||||
p.setBrush(palette().mid());
|
||||
|
||||
@@ -34,6 +34,7 @@ class KeyframeView : public QWidget
|
||||
public:
|
||||
explicit KeyframeView(std::shared_ptr<KeyframeModelList> model, int duration, QWidget *parent = nullptr);
|
||||
void setDuration(int dur);
|
||||
const QString getAssetId();
|
||||
|
||||
public slots:
|
||||
/* @brief moves the current position*/
|
||||
@@ -76,6 +77,8 @@ private:
|
||||
int m_zoomHeight;
|
||||
int m_offset;
|
||||
double m_scale;
|
||||
double m_zoomFactor;
|
||||
double m_zoomStart;
|
||||
/** @brief The zoom factor (start, end - between 0 and 1) */
|
||||
QPointF m_zoomHandle;
|
||||
QPointF m_lastZoomHandle;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2017 by by Jean-Baptiste Mardelle *
|
||||
* Copyright (C) 2017 by Jean-Baptiste Mardelle *
|
||||
* This file is part of Kdenlive. See www.kdenlive.org. *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
@@ -33,8 +33,6 @@ AssetCommand::AssetCommand(const std::shared_ptr<AssetParameterModel> &model, co
|
||||
, m_updateView(false)
|
||||
, m_stamp(QTime::currentTime())
|
||||
{
|
||||
QLocale locale;
|
||||
locale.setNumberOptions(QLocale::OmitGroupSeparator);
|
||||
m_name = m_model->data(index, AssetParameterModel::NameRole).toString();
|
||||
const QString id = model->getAssetId();
|
||||
if (EffectsRepository::get()->exists(id)) {
|
||||
@@ -43,26 +41,25 @@ AssetCommand::AssetCommand(const std::shared_ptr<AssetParameterModel> &model, co
|
||||
setText(i18n("Edit %1", TransitionsRepository::get()->getName(id)));
|
||||
}
|
||||
QVariant previousVal = m_model->data(index, AssetParameterModel::ValueRole);
|
||||
m_oldValue = previousVal.type() == QVariant::Double ? locale.toString(previousVal.toDouble()) : previousVal.toString();
|
||||
m_oldValue = previousVal.type() == previousVal.toString();
|
||||
}
|
||||
|
||||
void AssetCommand::undo()
|
||||
{
|
||||
m_model->setParameter(m_name, m_oldValue, true, m_index);
|
||||
}
|
||||
// virtual
|
||||
|
||||
void AssetCommand::redo()
|
||||
{
|
||||
m_model->setParameter(m_name, m_value, m_updateView, m_index);
|
||||
m_updateView = true;
|
||||
}
|
||||
|
||||
// virtual
|
||||
int AssetCommand::id() const
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
// virtual
|
||||
|
||||
bool AssetCommand::mergeWith(const QUndoCommand *other)
|
||||
{
|
||||
if (other->id() != id() || static_cast<const AssetCommand *>(other)->m_index != m_index ||
|
||||
@@ -82,8 +79,6 @@ AssetMultiCommand::AssetMultiCommand(const std::shared_ptr<AssetParameterModel>
|
||||
, m_updateView(false)
|
||||
, m_stamp(QTime::currentTime())
|
||||
{
|
||||
QLocale locale;
|
||||
locale.setNumberOptions(QLocale::OmitGroupSeparator);
|
||||
qDebug()<<"CREATING MULTIPLE COMMAND!!!\nVALUES: "<<m_values;
|
||||
m_name = m_model->data(indexes.first(), AssetParameterModel::NameRole).toString();
|
||||
const QString id = model->getAssetId();
|
||||
@@ -92,9 +87,9 @@ AssetMultiCommand::AssetMultiCommand(const std::shared_ptr<AssetParameterModel>
|
||||
} else if (TransitionsRepository::get()->exists(id)) {
|
||||
setText(i18n("Edit %1", TransitionsRepository::get()->getName(id)));
|
||||
}
|
||||
for (QModelIndex ix : m_indexes) {
|
||||
for (QModelIndex ix : qAsConst(m_indexes)) {
|
||||
QVariant previousVal = m_model->data(ix, AssetParameterModel::ValueRole);
|
||||
m_oldValues << (previousVal.type() == QVariant::Double ? locale.toString(previousVal.toDouble()) : previousVal.toString());
|
||||
m_oldValues << previousVal.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,7 +97,7 @@ void AssetMultiCommand::undo()
|
||||
{
|
||||
int indx = 0;
|
||||
int max = m_indexes.size() - 1;
|
||||
for (const QModelIndex &ix : m_indexes) {
|
||||
for (const QModelIndex &ix : qAsConst(m_indexes)) {
|
||||
m_model->setParameter(m_model->data(ix, AssetParameterModel::NameRole).toString(), m_oldValues.at(indx), indx == max, ix);
|
||||
indx++;
|
||||
}
|
||||
@@ -112,7 +107,7 @@ void AssetMultiCommand::redo()
|
||||
{
|
||||
int indx = 0;
|
||||
int max = m_indexes.size() - 1;
|
||||
for (const QModelIndex &ix : m_indexes) {
|
||||
for (const QModelIndex &ix : qAsConst(m_indexes)) {
|
||||
m_model->setParameter(m_model->data(ix, AssetParameterModel::NameRole).toString(), m_values.at(indx), m_updateView && indx == max, ix);
|
||||
indx++;
|
||||
}
|
||||
|
||||