Compare commits

...

761 Commits

Author SHA1 Message Date
l10n daemon script
fcdda32a3b SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2018-12-06 08:29:49 +01:00
Christoph Feck
9d8211fb4f GIT_SILENT Upgrade KDE Applications version to 18.12.0. 2018-12-05 00:35:47 +01:00
Jean-Baptiste Mardelle
2191e921fd Backport crash on image sequence import 2018-12-02 17:18:55 +01:00
Jean-Baptiste Mardelle
e27d5801b5 Backport fix for titler text gradient 2018-12-02 17:18:42 +01:00
l10n daemon script
9e04f34b43 GIT_SILENT made messages (after extraction) 2018-11-29 07:13:47 +01:00
Christoph Feck
41e66adea0 GIT_SILENT Upgrade KDE Applications version to 18.11.90. 2018-11-26 14:38:50 +01:00
l10n daemon script
e750a3a1f7 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2018-11-17 07:54:36 +01:00
l10n daemon script
88eb1b4b1e GIT_SILENT made messages (after extraction) 2018-11-16 06:57:10 +01:00
l10n daemon script
40e8161ee5 GIT_SILENT made messages (after extraction) 2018-11-13 07:15:27 +01:00
Albert Astals Cid
6b5172c136 GIT_SILENT Upgrade KDE Applications version to 18.11.80. 2018-11-09 23:22:23 +01:00
Albert Astals Cid
f5565c3177 Add donation url to appdata 2018-11-08 00:33:21 +01:00
l10n daemon script
08d749b515 GIT_SILENT made messages (after extraction) 2018-11-07 03:56:20 +01:00
Vincent Pinon
d65f9d10e1 Merge branch 'Applications/18.08' 2018-11-06 10:43:35 +01:00
Vincent Pinon
d884e9477c fix wrong previous commit (missed changes, doesn't compile) 2018-11-05 23:23:29 +01:00
Vincent Pinon
021437c673 Fix finding MLT data in build-time specified path 2018-11-05 23:19:00 +01:00
l10n daemon script
ae9281aa4a GIT_SILENT made messages (after extraction) 2018-11-03 06:52:17 +01:00
Christoph Feck
0569e5b524 GIT_SILENT Upgrade KDE Applications version to 18.08.3. 2018-11-02 16:12:24 +01:00
l10n daemon script
2044fc12c2 GIT_SILENT made messages (after extraction) 2018-11-01 03:50:49 +01:00
l10n daemon script
173cd374fd GIT_SILENT made messages (after extraction) 2018-10-31 06:57:59 +01:00
Yuri Chornoivan
161d2ac3ef Fix minor EBN issues and typos 2018-10-30 21:54:15 +02:00
Vincent PINON
4587d29380 Fix play/pause on Windows 2018-10-30 19:43:19 +01:00
Vincent PINON
cd50b3e744 Fix play/pause on Windows 2018-10-30 18:12:02 +01:00
l10n daemon script
ed2e894dda GIT_SILENT made messages (after extraction) 2018-10-30 03:47:01 +01:00
Vincent Pinon
a620dfa18d Merge branch 'Applications/18.08' 2018-10-29 23:34:02 +01:00
Vincent PINON
27c64c000d Try catching application initialization crashes 2018-10-29 23:31:15 +01:00
Vincent PINON
579812c905 Fix MinGW build script misses
* need to install tar
  * breeze-icons were removed by mistake
  * pick plasma color schemes
2018-10-29 23:31:05 +01:00
Vincent PINON
e44fbe218e Backport some Shotcut GLwidget updates 2018-10-29 23:31:05 +01:00
l10n daemon script
ae479cef24 GIT_SILENT made messages (after extraction) 2018-10-28 05:43:07 +01:00
l10n daemon script
4ce87b54d4 GIT_SILENT made messages (after extraction) 2018-10-28 02:44:00 +01:00
Yuri Chornoivan
3837bd71c6 Sync quickstart manual with UserBase 2018-10-27 14:45:39 +03:00
l10n daemon script
6993db7d34 GIT_SILENT made messages (after extraction) 2018-10-26 03:51:29 +02:00
l10n daemon script
785ee3c8e0 GIT_SILENT made messages (after extraction) 2018-10-25 03:52:49 +02:00
Vincent Pinon
d4b8700ba9 Merge branch 'Applications/18.08' 2018-10-24 19:02:56 +02:00
l10n daemon script
7598e6c39c GIT_SILENT made messages (after extraction) 2018-10-24 03:55:00 +02:00
Vincent PINON
d8fae4d641 Fix MinGW build 2018-10-23 22:53:32 +02:00
l10n daemon script
b0501506aa GIT_SILENT made messages (after extraction) 2018-10-23 06:53:22 +02:00
l10n daemon script
501638e298 GIT_SILENT made messages (after extraction) 2018-10-23 03:56:38 +02:00
l10n daemon script
4b4ce3bb27 GIT_SILENT made messages (after extraction) 2018-10-22 06:45:47 +02:00
l10n daemon script
9015986f09 GIT_SILENT made messages (after extraction) 2018-10-22 03:49:12 +02:00
Vincent Pinon
a35bd53fef Install doc files 2018-10-21 21:54:00 +02:00
Vincent Pinon
042fd1a353 Merge branch 'Applications/18.08' 2018-10-21 21:53:09 +02:00
Vincent PINON
23d6d018ee build scripts for Linux & Windows 2018-10-19 22:15:19 +02:00
Vincent PINON
a23aca3b2d Backport packaging scripts 2018-10-19 21:59:55 +02:00
Vincent PINON
cde8ebe01a Fix MinGW build 2018-10-19 19:55:45 +00:00
l10n daemon script
bd0a7d2327 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2018-10-19 07:41:30 +02:00
l10n daemon script
edae3ef86e SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2018-10-19 05:45:23 +02:00
l10n daemon script
c220a5404c GIT_SILENT made messages (after extraction) 2018-10-17 07:31:14 +02:00
Vincent Pinon
169648d1e9 Install doc files 2018-10-15 00:26:24 +02:00
Jean-Baptiste Mardelle
3c6b2441cf Backport fix for incorrect bin rename
CCBUG: 368206
2018-10-14 19:17:20 +02:00
l10n daemon script
443a7b8cc8 GIT_SILENT made messages (after extraction) 2018-10-14 07:08:45 +02:00
l10n daemon script
4379af7908 GIT_SILENT made messages (after extraction) 2018-10-14 04:13:58 +02:00
l10n daemon script
100256529b GIT_SILENT made messages (after extraction) 2018-10-11 06:46:00 +02:00
l10n daemon script
4415ac60d0 GIT_SILENT made messages (after extraction) 2018-10-10 07:45:26 +02:00
l10n daemon script
84b4a003c6 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2018-10-10 06:37:46 +02:00
l10n daemon script
a7ebd365ef GIT_SILENT made messages (after extraction) 2018-10-10 04:09:31 +02:00
l10n daemon script
235cdda4d1 GIT_SILENT made messages (after extraction) 2018-10-09 06:51:35 +02:00
Jean-Baptiste Mardelle
637d2115ac Improve missing luma detection (region transition) - fixes project crash 2018-10-08 08:35:32 +02:00
Jean-Baptiste Mardelle
72c6a1715a Home/End now also seek in clip monitor 2018-10-07 16:17:26 +02:00
Jean-Baptiste Mardelle
17074d01a1 Update AppData for upcoming release 2018-10-07 16:17:25 +02:00
Christoph Feck
e68bf3bc8e GIT_SILENT Upgrade KDE Applications version to 18.08.2. 2018-10-03 19:03:59 +02:00
Vincent Pinon
f22aad4c03 Merge branch 'Applications/18.08' 2018-09-28 22:30:08 +02:00
Vincent Pinon
51d34999ee Windows crash reports 2018-09-28 22:20:10 +02:00
Vincent Pinon
294cc23d84 Update authors 2018-09-28 22:20:10 +02:00
Jean-Baptiste Mardelle
3148e66263 Fix double clicking a title clip in bin tries to rename instead of opening the title dialog 2018-09-21 15:22:20 +02:00
Laurent Montel
079b88eb12 Make it compiles when we use QT_NO_NARROWING_CONVERSIONS_IN_CONNECT 2018-09-17 13:44:14 +02:00
Jean-Baptiste Mardelle
68556dbd6a Fix proxy creation not restarting when changing a property while creating proxy 2018-09-02 15:42:41 +02:00
Jean-Baptiste Mardelle
5cd17e333a Prepare AppData for next release 2018-09-01 19:25:49 +02:00
Jean-Baptiste Mardelle
7e511e09b2 Fix clip proxy on autorotate
BUG: 397762
2018-09-01 19:23:31 +02:00
Christoph Feck
5dec81039a GIT_SILENT Upgrade KDE Applications version to 18.08.1. 2018-08-31 18:42:34 +02:00
l10n daemon script
62c210067d SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2018-08-27 07:41:47 +02:00
l10n daemon script
11fae84a48 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2018-08-27 05:49:18 +02:00
Vincent Pinon
67a576f0d8 Merge branch 'Applications/18.08' 2018-08-21 03:35:53 +02:00
Vincent Pinon
cf4980fc0e Fix effects parameters parsing
regression since QtScript drop
2018-08-21 03:34:27 +02:00
Vincent Pinon
01797e3b94 Give priority to local effects over system ones 2018-08-21 03:34:27 +02:00
Vincent Pinon
a9e06e0a91 Access to MLT debug info (command line option) 2018-08-21 03:34:27 +02:00
Vincent Pinon
946842ac87 Fix OffScreenSurface creation in GUI thread 2018-08-21 03:34:27 +02:00
l10n daemon script
d4fa45e498 GIT_SILENT made messages (after extraction) 2018-08-19 06:33:29 +02:00
l10n daemon script
26925bd149 GIT_SILENT made messages (after extraction) 2018-08-19 03:43:23 +02:00
Yuri Chornoivan
79c3d3a396 Fix minor EBN issues 2018-08-18 16:23:55 +03:00
l10n daemon script
c9acd9c847 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2018-08-18 07:30:49 +02:00
l10n daemon script
0d30802c02 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2018-08-18 05:44:41 +02:00
Vincent Pinon
727f86bc4b Increase max unzoom level, uniform zoom factor 2018-08-15 01:07:34 +02:00
Jean-Baptiste Mardelle
f1e85c3987 Fix custom lift/gamma/gain displaying wrong UI
BUG: 364127
2018-08-09 07:37:46 +02:00
Christoph Feck
962e348183 GIT_SILENT Upgrade KDE Applications version to 18.08.0. 2018-08-06 22:44:29 +02:00
Jean-Baptiste Mardelle
56a98102b4 Updated appdata 2018-08-03 17:56:18 +02:00
Jean-Baptiste Mardelle
67fc6bb623 Fix possible crash in monitor restart 2018-08-03 17:56:02 +02:00
Christoph Feck
f7120a0c3d GIT_SILENT Upgrade KDE Applications version to 18.07.90. 2018-07-30 23:47:26 +02:00
Juku Trump
6a692aac63 Reduce minimum profile widget height to make dialog fit in screen
BUG: 384511
Differential Revision: https://phabricator.kde.org/D14281
2018-07-26 08:56:19 +02:00
l10n daemon script
a520629b6f SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2018-07-25 07:21:11 +02:00
l10n daemon script
4a310c8af7 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2018-07-25 05:35:07 +02:00
Albert Astals Cid
f31b8e6867 GIT_SILENT Upgrade KDE Applications version to 18.11.70. 2018-07-16 20:03:31 +02:00
Albert Astals Cid
34c5e9b147 GIT_SILENT Upgrade KDE Applications version to 18.07.80. 2018-07-16 19:30:48 +02:00
Jean-Baptiste Mardelle
fde698f778 Require MLT 6.10 (to avoid the incompatible 6.8) 2018-07-11 10:44:01 +02:00
Jean-Baptiste Mardelle
1557017613 Fix compile warning 2018-07-11 10:39:23 +02:00
Jean-Baptiste Mardelle
4a55b39829 Backport KF5 Purpose share feature 2018-07-11 10:38:58 +02:00
Jean-Baptiste Mardelle
3a34c2ab29 Backport fix for incorrect gap in texts 2018-07-11 10:08:21 +02:00
Vincent Pinon
eb39599102 Merge branch 'Applications/18.04' 2018-06-12 07:13:46 +02:00
Christoph Feck
2e1c399005 GIT_SILENT Upgrade KDE Applications version to 18.04.2. 2018-06-02 00:52:25 +02:00
Jean-Baptiste Mardelle
bcfff134ad Don't display Wizard on every AppImage startup 2018-06-01 00:43:17 +02:00
Jean-Baptiste Mardelle
2f329dd44f Fix message extraction 2018-05-31 07:43:32 +02:00
Jean-Baptiste Mardelle
1ffb8e8fec Prepare for 18.04.2 release 2018-05-29 09:04:00 +02:00
Jean-Baptiste Mardelle
47aaa52f44 Rename mime type file to make flatpak happy
Differential Revision: https://phabricator.kde.org/D13143
2018-05-29 09:02:51 +02:00
Jean-Baptiste Mardelle
9b09dbb2b0 Fix crash with MLT 6.8.0 and some keyfameable parameters (box blur) 2018-05-21 08:39:28 +02:00
Jean-Baptiste Mardelle
cdc60f7575 Consistent behavior for mouse wheel: down goes forward, up goes backwards
BUG: 394341
2018-05-21 08:18:35 +02:00
Jean-Baptiste Mardelle
2a377bf65a Update readme with correct infos 2018-05-11 11:13:18 +02:00
Jean-Baptiste Mardelle
4ee96a0c70 Update readme with correct infos 2018-05-11 11:12:51 +02:00
Jean-Baptiste Mardelle
d7c51af4d8 update monitor safezone overlay 2018-05-07 13:26:29 +02:00
Jean-Baptiste Mardelle
3850e34f9d Update appdata version 2018-05-05 09:10:41 +02:00
Christoph Feck
303b6727c2 GIT_SILENT Upgrade KDE Applications version to 18.04.1. 2018-05-02 14:18:18 +02:00
Jean-Baptiste Mardelle
dd28daf9aa Improve titler default background color 2018-04-28 17:35:34 +02:00
l10n daemon script
5649bec858 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2018-04-25 07:13:09 +02:00
l10n daemon script
1fb16353a7 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2018-04-23 05:29:51 +02:00
Andreas Sturmlechner
4b65a04953 Merge branch 'Applications/18.04' 2018-04-20 09:47:41 +02:00
Andreas Sturmlechner
c595018a42 Fix build with Qt 5.11_beta3 (dropping qt5_use_modules)
Summary:
A change in Qt 5.11_beta3 leads to errors like:

CMake Error at renderer/CMakeLists.txt:12 (qt5_use_modules):
  `Unknown CMake command "qt5_use_modules".`

Test Plan: Built fine.

Reviewers: #kdenlive, mardelle

Reviewed By: #kdenlive, mardelle

Differential Revision: https://phabricator.kde.org/D12184
2018-04-20 09:46:42 +02:00
Jean-Baptiste Mardelle
ddc1dba82a Only check color theme on first run, not each time the Wizard is called
BUG:388274
2018-04-20 08:04:35 +02:00
Jean-Baptiste Mardelle
304ea85e94 Fix luma files lost when opening project with AppImage 2018-04-10 21:07:51 +02:00
Jean-Baptiste Mardelle
3619d5caa1 Stop looking for DVD related apps on startup 2018-04-10 13:28:13 +02:00
Jean-Baptiste Mardelle
3493f9845d Update AppData version for comming release 2018-04-10 08:15:54 +02:00
Chris Holland
4c2d411d7c Scale TitleTemplateDialog preview with the window
Removed the spacer below the textbox+preview so that the preview scales vertically.
Set the preview horizontal size policy to MinimumExpanding so it's not fixed to 200px wide.

Differential Revision: https://phabricator.kde.org/D12057
2018-04-10 08:09:43 +02:00
Chris Holland
dbd5a248df Scale TitleTemplateDialog preview with the window
Removed the spacer below the textbox+preview so that the preview scales vertically.
Set the preview horizontal size policy to MinimumExpanding so it's not fixed to 200px wide.

Differential Revision: https://phabricator.kde.org/D12057
2018-04-09 17:34:41 -04:00
Christoph Feck
6d84610037 GIT_SILENT Upgrade KDE Applications version to 18.04.0. 2018-04-09 22:42:43 +02:00
Jean-Baptiste Mardelle
e342d7351c Fix rendering using custom folder when not requested
BUG: 387135
2018-04-09 17:18:46 +02:00
Jean-Baptiste Mardelle
ee96bb69fb Fix double separator in project/capture folder
CCBUG: 387135
2018-04-09 13:49:39 +02:00
Jean-Baptiste Mardelle
86f77a9019 Fix possibly wrong message on moving project folder 2018-04-09 09:08:47 +02:00
Jean-Baptiste Mardelle
dc6dff18c6 Fix regression breaking fades and other effects on resize 2018-04-08 11:28:25 +02:00
Christoph Feck
88d7b9cc51 GIT_SILENT Upgrade KDE Applications version to 18.03.90. 2018-04-02 21:20:41 +02:00
Jean-Baptiste Mardelle
46e4bcc34f Merge branch '1804' 2018-03-27 09:17:32 +02:00
Jean-Baptiste Mardelle
42249e5007 Fix lowres icons on highdpi
patch by Andrew Crouthamel
BUG: 390104
2018-03-27 09:16:28 +02:00
l10n daemon script
b701e1cfe7 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2018-03-26 05:08:13 +02:00
Daniel Vrátil
99f97927c3 Merge branch 'Applications/18.04' 2018-03-23 11:38:22 +01:00
Daniel Vrátil
cc938b8cb2 Fix crash when initializing offscreen surface in GLWidget
GLWidget::initializeGL() is called in renderer thread so the QOffscreenSurface must
also live in the renderer thread.

Differential Revision: https://phabricator.kde.org/D11509
2018-03-23 11:38:10 +01:00
Jean-Baptiste Mardelle
08fb51a42b Merge branch '1804' 2018-03-23 09:03:42 +01:00
Jean-Baptiste Mardelle
c4b87e8526 Move knsrc files in Qt resource so we find them without install
BUG: 392201
2018-03-23 08:52:37 +01:00
Albert Astals Cid
5611eebafb GIT_SILENT Upgrade KDE Applications version to 18.07.70. 2018-03-19 23:53:30 +01:00
Albert Astals Cid
b558147ba0 GIT_SILENT Upgrade KDE Applications version to 18.03.80. 2018-03-19 23:39:18 +01:00
Andrius Štikonas
af633f74e8 Merge branch 'Applications/17.12' 2018-03-19 23:07:14 +01:00
Andreas Sturmlechner
59bc433af9 Fix build with Qt 5.11 (missing headers)
Reviewers: #kdenlive, mardelle

Reviewed By: #kdenlive, mardelle

Differential Revision: https://phabricator.kde.org/D11425
2018-03-19 12:43:34 +01:00
l10n daemon script
5b5e415834 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2018-03-19 06:59:15 +01:00
l10n daemon script
b7259ad554 GIT_SILENT made messages (after extraction) 2018-03-19 05:53:52 +01:00
l10n daemon script
7d7a4efd09 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2018-03-19 05:11:23 +01:00
l10n daemon script
88a21bdf44 GIT_SILENT made messages (after extraction) 2018-03-19 03:25:16 +01:00
Jean-Baptiste Mardelle
4dcdcce3ff Fix project settings vertical scrollbar on open
Differential Revision: https://phabricator.kde.org/D10449
2018-03-02 11:46:48 +01:00
Christoph Feck
5a05e9d500 GIT_SILENT Upgrade KDE Applications version to 17.12.3. 2018-03-01 23:56:52 +01:00
Jean-Baptiste Mardelle
213e64339b Update minimum MLT version to latest release (fixes audio mix problem) 2018-02-26 13:18:29 +01:00
l10n daemon script
af714cbdcd GIT_SILENT made messages (after extraction) 2018-02-14 05:37:22 +01:00
l10n daemon script
f36f1dc975 GIT_SILENT made messages (after extraction) 2018-02-14 03:16:13 +01:00
Andrius Štikonas
0c456f7fb2 Use KAboutData::setDesktopFileName instead of QGuiApplication version.
Without this icon under Wayland is not working anyway.
2018-02-09 01:37:06 +00:00
l10n daemon script
ca468bc85b SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2018-02-06 05:17:25 +01:00
Luigi Toscano
a33bd84d54 Merge remote-tracking branch 'origin/Applications/17.12' 2018-02-06 00:16:22 +01:00
Jean-Baptiste Mardelle
92b88c61ac Fix compatibility with MLT >= 6.6.0 2018-02-04 12:34:16 +01:00
Albert Astals Cid
bab0ebc50d GIT_SILENT Upgrade KDE Applications version to 17.12.2. 2018-02-03 00:44:22 +01:00
l10n daemon script
9ca1cd57ca SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2018-02-02 05:24:29 +01:00
l10n daemon script
069e430ae4 GIT_SILENT made messages (after extraction) 2018-02-02 03:28:00 +01:00
l10n daemon script
02b7a19dfe SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2018-01-23 06:55:33 +01:00
Wolfgang Bauer
94c420c85b Fix build with Qt 5.6
Q(Gui)Application::setDesktopFileName() was introduced in Qt 5.7, but
kdenlive specifies 5.6.0 as minimum version in CMakeLists.txt.
2018-01-22 16:03:09 +01:00
Jean-Baptiste Mardelle
ea185dfce6 Fix backwards seeking not stoping when reaching clip start 2018-01-16 23:32:33 +01:00
Jean-Baptiste Mardelle
3bc52cf369 Add release version number to AppData 2018-01-12 11:16:08 +01:00
Jean-Baptiste Mardelle
41a9199800 Don't query available widget styles on each startup 2018-01-12 11:14:21 +01:00
Jean-Baptiste Mardelle
5de2633cc5 Fix webM encoding (auto replace vorbis by libvorbis if installed)
BUG: 388503
2018-01-11 09:59:00 +01:00
l10n daemon script
62610f6114 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2018-01-11 06:26:41 +01:00
l10n daemon script
6f47b64c6d SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2018-01-11 04:50:27 +01:00
Jean-Baptiste Mardelle
86b7c0bc08 Fix AppImage screenshot
BUG: 388676
2018-01-10 09:06:27 +01:00
Albert Astals Cid
19d707d927 GIT_SILENT Upgrade KDE Applications version to 17.12.1. 2018-01-04 18:53:02 +01:00
l10n daemon script
86c305de39 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-12-25 06:05:29 +01:00
l10n daemon script
cd6717b4ee SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-12-25 04:42:54 +01:00
Jean-Baptiste Mardelle
60916dd1fe Fix translation install 2017-12-15 23:56:17 +01:00
Jean-Baptiste Mardelle
91186164a8 remove useless audio bitrate on pcm proxy encoding 2017-12-07 19:35:14 +01:00
Jean-Baptiste Mardelle
5b33c563e2 Update proxy profiles 2017-12-07 09:18:48 +01:00
Jean-Baptiste Mardelle
77922b4ec8 Make sure playlist proxies have an even height 2017-12-06 13:32:11 +01:00
Jean-Baptiste Mardelle
423ba3b1d5 Fix crash on playlists concurrent jobs using library clips
CCBUG: 386616
2017-12-06 13:32:11 +01:00
Christoph Feck
52bf301299 GIT_SILENT Upgrade KDE Applications version to 17.12.0. 2017-12-05 00:05:05 +01:00
l10n daemon script
a20680186f SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-12-04 06:13:33 +01:00
l10n daemon script
276f61d09f GIT_SILENT made messages (after extraction) 2017-12-04 05:20:13 +01:00
l10n daemon script
e2d0e02efd SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-12-04 04:43:58 +01:00
l10n daemon script
862924d526 GIT_SILENT made messages (after extraction) 2017-12-04 03:08:45 +01:00
Jean-Baptiste Mardelle
b6cdb35d3d Timeline preview fixes: Don't invalidate on expand/collapse effect, invalidate on master clip edit 2017-12-03 17:04:27 +01:00
Jean-Baptiste Mardelle
a568c01505 Don't restart clip if trying to play backwards from clip monitor end 2017-12-01 14:10:00 +01:00
Jean-Baptiste Mardelle
5950ef6506 Use smaller size for image proxies
BUG: 353577
2017-12-01 13:19:42 +01:00
Jean-Baptiste Mardelle
a0579e7834 Fix playing backwards forwards one second
BUG: 375634
2017-12-01 13:17:43 +01:00
Christoph Feck
856763adba GIT_SILENT Upgrade KDE Applications version to 17.11.90. 2017-11-30 22:25:06 +01:00
Vincent Pinon
0b3bc44566 Merge branch 'Applications/17.12' 2017-11-13 17:00:49 +01:00
Vincent Pinon
f87ee28c0a Merge branch 'Applications/17.08' into Applications/17.12 2017-11-13 16:58:04 +01:00
Albert Astals Cid
f2b70a17c3 GIT_SILENT Upgrade KDE Applications version to 18.03.70. 2017-11-13 09:06:57 +01:00
Albert Astals Cid
b5bac8ab36 GIT_SILENT Upgrade KDE Applications version to 17.11.80. 2017-11-13 01:11:45 +01:00
Jean-Baptiste Mardelle
102e588cfd Fix extension in transcode file dialog 2017-11-10 14:40:56 +01:00
Christoph Feck
d8e2777321 GIT_SILENT Upgrade KDE Applications version to 17.08.3. 2017-11-05 01:49:10 +01:00
Andrius Štikonas
33931eee91 Set a proper desktop file name to fix an icon under Wayland. 2017-11-04 10:35:08 +01:00
Jean-Baptiste Mardelle
3f9180b5c0 Sort clip zones by position instead of name 2017-11-04 10:34:21 +01:00
l10n daemon script
4cfa2b978a SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-11-04 06:10:35 +01:00
l10n daemon script
6b63039e51 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-11-04 04:49:47 +01:00
Vincent Pinon
164f9fe0a6 Fix melt.exe finding on windows 2017-11-03 22:20:56 +01:00
Vincent Pinon
0a12e90cb5 Revert "Windows: terminate KDE session on window close"
This reverts commit d6cea2efee.
2017-11-03 20:55:13 +01:00
Vincent Pinon
04ee4fa925 Make KCrash optional 2017-11-03 20:55:13 +01:00
Jean-Baptiste Mardelle
ec7da49c42 Sort clip zones by position instead of name 2017-11-01 08:46:33 +01:00
Andrius Štikonas
09d696b9c5 Set a proper desktop file name to fix an icon under Wayland. 2017-10-14 21:11:57 +01:00
Christoph Feck
9041c04c52 GIT_SILENT Upgrade KDE Applications version to 17.08.2. 2017-10-08 04:47:46 +02:00
Jean-Baptiste Mardelle
181e5dd4b0 Merge branch '1708' 2017-10-06 08:04:35 +02:00
Jean-Baptiste Mardelle
630f7bbfcf Fix autosave : workaround KAutoSaveFile bug with non ascii chars 2017-10-05 13:42:16 +02:00
l10n daemon script
d2e26bb194 GIT_SILENT made messages (after extraction) 2017-10-05 03:28:22 +02:00
Jean-Baptiste Mardelle
529e7a235b Get ready for transform centered rotation 2017-10-03 13:18:28 +02:00
Jean-Baptiste Mardelle
f4c9a045f2 Fix keyframes unseekable on bin effects 2017-10-03 08:39:06 +02:00
l10n daemon script
f368c6448a SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-10-03 04:59:14 +02:00
Dušan Hanuš
4a7088e8b0 Fix lift to handle negative values (requires latest MLT version) 2017-09-30 12:28:43 +02:00
l10n daemon script
c98bbdffd1 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-09-30 05:12:14 +02:00
l10n daemon script
48db9dad9c SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-09-15 05:09:22 +02:00
l10n daemon script
f372f318d6 GIT_SILENT made messages (after extraction) 2017-09-15 03:34:06 +02:00
Vincent Pinon
6fef57061c Merge branch 'Applications/17.08' 2017-09-12 22:30:02 +02:00
Vincent Pinon
04541ba0dd Prefer SDL2 to SDL1 (dropped by FFmpeg and so MLT) 2017-09-11 16:01:45 +02:00
Jean-Baptiste Mardelle
fdbbf21270 Merge branch '17.08' 2017-09-05 07:51:31 +02:00
l10n daemon script
155a8c1bc1 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-09-05 05:50:49 +02:00
l10n daemon script
36e0f91201 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-09-05 04:28:06 +02:00
Jean-Baptiste Mardelle
590a83fdc5 Remember last selected title template
CCBUG: 384340
2017-09-04 19:10:54 +02:00
Jean-Baptiste Mardelle
67b051577c Fix proxy error (height not multiple of 2)
BUG: 384345
2017-09-04 13:37:46 +02:00
Jean-Baptiste Mardelle
61cf7cdf37 Fix extract frame from bin exporting lower than source image 2017-09-04 13:21:33 +02:00
Michael Georg Hansen
0d053c69bf Fix visibility check of tracks in multitrack-view
Differential Revision: https://phabricator.kde.org/D7670
2017-09-03 21:19:00 +02:00
Jean-Baptiste Mardelle
67c4958b65 Allow disabling autosave until we improve it
BUG: 384197
2017-09-03 08:12:23 +02:00
Albert Astals Cid
0fba2e0643 GIT_SILENT Upgrade KDE Applications version to 17.08.1. 2017-09-02 11:36:52 +02:00
Tobias C. Berner
012d1cfeb8 FreeBSD does not have sys/asm.h -- for what is this include needed on linux?
Reviewers: #freebsd, mardelle

Differential Revision: https://phabricator.kde.org/D6929
2017-08-26 15:41:49 +02:00
Vincent Pinon
db856a5cd3 Windows: find Kdenlive lumas
BUG: 375337
2017-08-21 22:20:38 +02:00
Vincent Pinon
d6cea2efee Windows: terminate KDE session on window close
BUG: 380854
2017-08-21 22:20:37 +02:00
Vincent Pinon
2c2c6a32e0 Windows: always use bundled MLT
BUG: 380036
2017-08-21 22:20:37 +02:00
Vincent Pinon
a692f3bb8c Remove project profiles sharing (knsrc)
Never used, not created on store.kde.org

BUG: 383238
2017-08-21 22:20:37 +02:00
Vincent Pinon
ecbc0967fd Gardening: fix GCC warnings (8) 2017-08-21 06:28:56 +02:00
Luigi Toscano
5fb0e4a5b8 doc: fix option (qwindowtitle instead of caption) 2017-08-20 17:07:51 +02:00
Jean-Baptiste Mardelle
e4c764483f Merge branch 'Applications/17.08' 2017-08-09 19:39:17 +02:00
Jean-Baptiste Mardelle
16690444c2 Fix audio mix clicks when using recent MLT
BUG: 371849
2017-08-09 19:36:40 +02:00
Albert Astals Cid
596163833d GIT_SILENT Upgrade KDE Applications version to 17.08.0. 2017-08-08 20:24:13 +02:00
Jean-Baptiste Mardelle
42cc3b0ebc Merge branch '1708' 2017-08-04 07:32:48 +02:00
Jean-Baptiste Mardelle
cbb224784f Fix some checkbox displaying inconsistent info 2017-08-04 07:28:20 +02:00
l10n daemon script
28a7d4bd33 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-08-04 04:39:50 +02:00
Luigi Toscano
bb14c0739c Fix terminology: mimetype(s) -> MIME type(s) 2017-08-02 01:25:54 +02:00
Luigi Toscano
e6a6fc62e3 Fix UI string: Control Center -> System Settings 2017-08-02 01:17:19 +02:00
Christoph Feck
4cac44220e GIT_SILENT Upgrade KDE Applications version to 17.07.90. 2017-07-31 01:59:09 +02:00
Montel Laurent
5e0b0db076 Const'ify code 2017-07-30 14:04:17 +02:00
l10n daemon script
60712faceb SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-07-30 04:54:29 +02:00
l10n daemon script
53f612a22b SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-07-28 06:01:17 +02:00
Jean-Baptiste Mardelle
e0473f8619 Merge branch '1708' 2017-07-27 08:51:48 +02:00
Jean-Baptiste Mardelle
7ecca09acc Fix downloaded lumas do not appear in interface (uninstall/reinstall existing lumas will be required for previously downloaded)
BUG: 382451
2017-07-27 08:50:14 +02:00
l10n daemon script
793f549770 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-07-26 08:49:04 +02:00
Jean-Baptiste Mardelle
f863490fea Merge branch 'Applications/17.08' 2017-07-24 11:31:21 +02:00
Jean-Baptiste Mardelle
38b3aec21d Make it possible to assign shortcut to extract frame feature,
always suggest a name (and improve suggestion by adding 0 padding for better sorting)
BUG: 381325
2017-07-24 10:07:47 +02:00
Vincent Pinon
e7db0285ef Merge branch 'Applications/17.08' 2017-07-23 23:44:10 +02:00
Vincent Pinon
e20cb65f34 Gardening: fix GCC warnings (7) 2017-07-21 21:32:05 +02:00
Vincent Pinon
2bda800f9e Gardening: fix GCC warnings (6) 2017-07-21 21:32:04 +02:00
Vincent Pinon
3421356529 Gardening: fix GCC warnings (5) 2017-07-21 21:32:04 +02:00
Vincent Pinon
a2b0d69931 Gardening: fix GCC warnings (4) 2017-07-21 21:32:04 +02:00
Vincent Pinon
ff8ecee321 Gardening: fix GCC warnings (3) 2017-07-21 21:32:04 +02:00
Vincent Pinon
fa77da1742 Gardening: fix GCC warnings (2) 2017-07-21 21:32:04 +02:00
Vincent Pinon
e9979ffd0e Gardening: fix GCC warnings (1) 2017-07-21 21:32:04 +02:00
Nicolas Carion
45a8b68328 fix import image sequence 2017-07-21 10:15:11 +02:00
Jean-Baptiste Mardelle
832e699b52 Fix clip markers behavior broken on project opening
BUG: 382403
2017-07-19 21:33:15 +02:00
Albert Astals Cid
92698a3685 GIT_SILENT Upgrade KDE Applications version to 17.07.80. 2017-07-17 22:20:36 +02:00
Albert Astals Cid
da98113f10 GIT_SILENT Upgrade KDE Applications version to 17.11.70. 2017-07-17 20:40:40 +02:00
Jean-Baptiste Mardelle
33264f9a98 Fix freeze effect broken (cannot change frozen frame) 2017-07-15 10:10:28 +02:00
Jean-Baptiste Mardelle
02f86a8725 Merge remote-tracking branch 'origin/Applications/17.04' 2017-07-11 08:23:48 +02:00
Jean-Baptiste Mardelle
7d719ca802 Fix crash on importing multistream clip
BUG: 381584
2017-07-10 20:39:30 +02:00
Jean-Baptiste Mardelle
078dc8d1e0 Fix crash when creating proxies - real issue not yet fixed
CCBUG: 381738
2017-07-10 20:03:33 +02:00
Albert Astals Cid
703360538d GIT_SILENT Upgrade KDE Applications version to 17.04.3. 2017-07-10 00:49:36 +02:00
Montel Laurent
3d1beab793 Use QString directly 2017-07-04 09:06:44 +02:00
Montel Laurent
4ca32b4d22 Use isEmpty 2017-06-26 07:32:08 +02:00
Montel Laurent
915970c1aa Merge branch 'master' of git://anongit.kde.org/kdenlive 2017-06-26 07:01:15 +02:00
Montel Laurent
4c3c8ccb37 Use isEmpty() 2017-06-26 07:01:00 +02:00
Vincent Pinon
5a51022496 fix compile (gcc7)
BUG: 379688
2017-06-25 10:11:19 +02:00
Vincent Pinon
ae4c544f6f show info on MLT found by CMake 2017-06-23 08:40:37 +02:00
Vincent Pinon
40faa0eb2c non-portable flag, let build system handle it 2017-06-23 08:40:36 +02:00
Vincent Pinon
9e288db02d Windows icons are delivered in icontheme.rcc 2017-06-23 08:40:09 +02:00
Jean-Baptiste Mardelle
2ed43d34a1 Fix compilation 2017-06-19 13:21:16 +02:00
Jean-Baptiste Mardelle
ad694e0477 Merge branch '17.04' 2017-06-16 10:31:38 +02:00
Jean-Baptiste Mardelle
72c75b7772 Fix custom profile not found on creation 2017-06-16 07:31:27 +02:00
Jean-Baptiste Mardelle
8958d7df24 Fix loop zone
BUG: 378813
BUG: 381146
2017-06-15 20:28:01 +02:00
Montel Laurent
c88f51af7c Remove qt module in include 2017-06-07 07:11:16 +02:00
Albert Astals Cid
9ffa5e6d79 GIT_SILENT Upgrade KDE Applications version to 17.04.2. 2017-06-05 21:05:55 +02:00
Montel Laurent
e6dc4cb368 use constFirst 2017-06-03 07:49:03 +02:00
Montel Laurent
7f56a6f0f1 Make it compile 2017-06-03 07:48:43 +02:00
Montel Laurent
d79c3cb16c Use Q_DECL_OVERRIDE 2017-06-02 07:41:24 +02:00
l10n daemon script
a153154910 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-05-30 05:32:32 +02:00
l10n daemon script
0120221193 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-05-30 04:22:54 +02:00
l10n daemon script
8b48e2d4a3 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-05-24 10:08:45 +02:00
l10n daemon script
0c6a4327d3 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-05-24 08:49:08 +02:00
l10n daemon script
960ae4650b SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-05-23 05:53:05 +02:00
l10n daemon script
9a86cb15da GIT_SILENT made messages (after extraction) 2017-05-23 05:15:02 +02:00
l10n daemon script
735d1ab7cc SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-05-23 04:43:58 +02:00
l10n daemon script
0ab3c46794 GIT_SILENT made messages (after extraction) 2017-05-23 03:03:55 +02:00
l10n daemon script
0defb20de9 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-05-22 05:29:32 +02:00
l10n daemon script
26f17f6bf0 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-05-22 04:12:47 +02:00
l10n daemon script
668592c6e7 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-05-21 05:48:38 +02:00
l10n daemon script
f69dd4083c SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-05-21 04:36:41 +02:00
l10n daemon script
5eceeba1f5 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-05-20 04:17:55 +02:00
Vincent PINON
65778d9f0f Merge branch 'Applications/17.04' 2017-05-19 14:54:49 +02:00
Vincent PINON
aa80c88cc4 Forgot this file in previous commit :( 2017-05-19 14:33:46 +02:00
Vincent PINON
ec09e5e54c Merge branch 'Applications/17.04' 2017-05-19 14:13:37 +02:00
Vincent Pinon
94b1b432ec Fix crash changing title font for 2nd time
BUG: 379606
2017-05-19 14:03:49 +02:00
Vincent Pinon
8f788c1d13 more Windows rendering fixes 2017-05-19 14:03:35 +02:00
l10n daemon script
4d7a3a6dd6 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-05-14 05:26:45 +02:00
l10n daemon script
0156e1e417 GIT_SILENT made messages (after extraction) 2017-05-12 04:56:34 +02:00
l10n daemon script
118ce7d1d9 GIT_SILENT made messages (after extraction) 2017-05-12 02:59:35 +02:00
Jean-Baptiste Mardelle
9dc38dd769 Merge branch '17.04' 2017-05-11 20:05:34 +02:00
Montel Laurent
11726f8764 Use nullptr 2017-05-11 07:33:21 +02:00
Nicolas Carion
3ab863f0d5 Fix init of geometryWidget
CCBUG: 379274
2017-05-09 17:35:38 +02:00
Jean-Baptiste Mardelle
6435a4ebdb Merge branch '17.04' 2017-05-09 13:07:18 +02:00
Jean-Baptiste Mardelle
b965270152 Fix title clip duration cannot be changed
BUG: 379582
2017-05-08 19:52:35 +02:00
Albert Astals Cid
55c1ee1c7b GIT_SILENT Upgrade KDE Applications version to 17.04.1. 2017-05-08 13:05:56 +02:00
R.J.V. Bertin
9675c27073 Avoid using #elifdef
Clang rejects that non-standard preprocessor token, at least on Mac.
Use "#elif defined(Q_OS_WIN)" instead.
2017-05-04 17:19:09 +02:00
R.J.V. Bertin
b4e74ad93c Try harder to set KUrlRequester save mode in the renderwidget.
Pre-5.33.0 KUrlRequester versions don't have setAcceptMode() but may
still expose their QFileDialog instance. This is especially important
on Mac when native file dialogs are being used because otherwise users
can only select the directory where to save instead of a full file path.
2017-05-04 17:06:46 +02:00
Montel Laurent
1834b9a96e Make sure that text is not empty 2017-04-28 21:49:43 +02:00
Montel Laurent
b8a83d2b68 Use QLatin1Char(...) 2017-04-28 21:43:07 +02:00
Pino Toscano
ec69039673 cmake: remove unused FindQJSON.cmake 2017-04-21 07:45:39 +02:00
Jean-Baptiste Mardelle
fe684e7eb3 Merge branch '17.04' 2017-04-18 12:32:50 +02:00
Jean-Baptiste Mardelle
456635ac2c Allow passing pre-parameters using "-i" to specify where the input file name should go in ffmpeg parameters
Should work in proxy and transcoding, for example:
-vaapi_device /dev/dri/renderD128 -hwaccel vaapi -hwaccel_output_format vaapi -i -an -c:v dnxhd
Will insert source file name after "-i".
CCBUG: 378832
2017-04-18 07:45:17 +02:00
Jean-Baptiste Mardelle
209e4fccb5 Merge branch '17.04' 2017-04-17 10:57:12 +02:00
Jean-Baptiste Mardelle
3404da90de Fixed off-by-one errors in fft-based cross-correlation computations
Patch by raphaelm
Differential Revision: https://phabricator.kde.org/D5454
2017-04-17 10:36:37 +02:00
Vincent Pinon
414d6579a1 Don't show color theme configuration option unavailable on Windows
BUG: 375723
2017-04-16 06:03:38 +02:00
Vincent Pinon
673d0f79ed Fix temp path on Windows
BUG: 375717
2017-04-16 06:03:38 +02:00
Vincent Pinon
7cf9980c1f Fix MLT doc link
BUG: 375316
2017-04-16 06:03:38 +02:00
l10n daemon script
e8d6b75c36 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-04-16 05:15:25 +02:00
l10n daemon script
9f01d93689 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-04-16 04:02:38 +02:00
Vincent Pinon
984df727b9 Fix script export & QScript header left 2017-04-15 22:23:40 +02:00
Jean-Baptiste Mardelle
6f5584eee1 Fix glitch on pause and does not play last second of project
BUG: 371762
2017-04-13 08:08:16 +02:00
Albert Astals Cid
74a0be8d8b GIT_SILENT Upgrade KDE Applications version to 17.04.0. 2017-04-12 13:45:18 +02:00
Vincent Pinon
c92aa046c9 remove QScript dependency 2017-04-09 00:20:34 +02:00
Vincent Pinon
42a40132a1 Fix render scripts on Windows: generate .bat files 2017-04-09 00:20:34 +02:00
Albert Astals Cid
b09224eee3 GIT_SILENT Upgrade KDE Applications version to 17.03.90. 2017-04-05 22:01:17 +02:00
Montel Laurent
4724bb8b4d Merge branch 'master' of git://anongit.kde.org/kdenlive 2017-04-05 21:48:33 +02:00
Montel Laurent
d33d59c234 Port some foreach to c++ for(...:...) 2017-04-05 21:48:17 +02:00
Kevin Funk
8ec829f1b6 Fix compiler settings for Clang 2017-04-04 18:48:02 +02:00
l10n daemon script
80e0b44f18 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-04-03 04:56:47 +02:00
l10n daemon script
e4e8207552 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-04-03 03:57:26 +02:00
Jean-Baptiste Mardelle
020eb7bea1 Merge branch '17.04' 2017-03-28 14:03:24 +02:00
Jean-Baptiste Mardelle
cb89fe494c Fix possible crash on rendering with "play after render" option 2017-03-28 14:02:31 +02:00
Vincent Pinon
388d983390 Merge branch 'Applications/17.04' 2017-03-28 00:09:32 +02:00
Vincent Pinon
478589576b Images also use qimage producer 2017-03-28 00:09:06 +02:00
Vincent Pinon
6766aec23d fix Windows build with C++ threads 2017-03-28 00:09:04 +02:00
Jean-Baptiste Mardelle
3e5598b2a4 Fix some effects incorrectly initialized on tracks
BUG: 378071
2017-03-26 11:11:17 +02:00
l10n daemon script
b1c5738a6e SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-03-26 06:02:21 +02:00
l10n daemon script
79a0a88912 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-03-26 04:57:27 +02:00
Jean-Baptiste Mardelle
359220c9ce Remove beta message in preparation of release 2017-03-25 12:27:47 +01:00
Jean-Baptiste Mardelle
a2b2d50586 Fix locked ratio scaling 2017-03-25 12:26:59 +01:00
l10n daemon script
66cfda93ce SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-03-25 06:00:00 +01:00
l10n daemon script
7c237457f6 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-03-25 04:34:40 +01:00
Jean-Baptiste Mardelle
df840cdf26 Merge branch '17.04' 2017-03-24 15:23:40 +01:00
Jean-Baptiste Mardelle
d961c39bd8 Fix archived project wrong path and missing images/slideshows
CCBUG: 377999
CCBUG: 378000
2017-03-24 15:23:02 +01:00
Jean-Baptiste Mardelle
f99275fabe More clever ratio locking in effect/transition 2017-03-24 09:36:14 +01:00
l10n daemon script
b279de93be SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-03-23 05:28:11 +01:00
Jean-Baptiste Mardelle
d0753238c0 Merge branch '17.04' 2017-03-22 11:58:34 +01:00
Jean-Baptiste Mardelle
243dff060b Add option to lock aspect ratio in geometry effects/transitions 2017-03-22 11:57:59 +01:00
Jean-Baptiste Mardelle
78a1d89f40 Merge branch '17.04' 2017-03-21 00:31:40 +01:00
Jean-Baptiste Mardelle
3d53f18644 Ensure we have a default profile at first start 2017-03-21 00:30:46 +01:00
Jean-Baptiste Mardelle
2fd4a6c711 Merge branch '17.04' 2017-03-21 00:08:48 +01:00
Jean-Baptiste Mardelle
425efbbbbe Profile widget: make UI more compact, remember filter status if default profile matches, ensure selected profile is visible
CCBUG: 377853
2017-03-21 00:07:26 +01:00
Albert Astals Cid
8d2c091641 GIT_SILENT Upgrade KDE Applications version to 17.03.80. 2017-03-20 23:50:33 +01:00
Albert Astals Cid
723988783c GIT_SILENT Upgrade KDE Applications version to 17.07.70. 2017-03-20 23:25:08 +01:00
l10n daemon script
d3aa4cb6e4 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-03-20 03:55:09 +01:00
Jean-Baptiste Mardelle
d9ecb0751b Make sure autosave is enabled in all cases
CCBUG: 377512
2017-03-19 21:37:20 +01:00
Jean-Baptiste Mardelle
8e054c9a52 Hide currently edited title clip when requesting background in title widget
CCBUG: 377803
2017-03-19 21:04:49 +01:00
l10n daemon script
6665d7fb41 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-03-19 03:54:34 +01:00
Nicolas Carion
1c741db4fd change design of profile filters 2017-03-18 14:53:38 +01:00
Nicolas Carion
92e561d10f fix and improve profile selection widget 2017-03-17 19:17:20 +01:00
Jean-Baptiste Mardelle
e84bbd0ac8 Fix compilation with KDE Frameworks < 5.25 (launchpad) 2017-03-17 14:19:54 +01:00
Jean-Baptiste Mardelle
8d9c04ab8f Allow renaming bin items with context menu and standard shortcut
BUG: 377585
Fixes D5074
2017-03-17 13:24:07 +01:00
l10n daemon script
8e2d00e30b SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-03-17 03:49:05 +01:00
l10n daemon script
9dc324c468 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-03-16 05:15:42 +01:00
David Faure
ab8c2381ae Port away from qt_qhash_seed which is going away in Qt 5.9
https://codereview.qt-project.org/188474

qSetGlobalQHashSeed exists since Qt 5.6, but this project seems to
require only 5.2, so I added a Qt version ifdef.

(cherry picked from commit 52cb4d3a7d)
2017-03-15 08:52:38 +01:00
l10n daemon script
74cf8fa64d SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-03-15 05:11:15 +01:00
l10n daemon script
0b5be0aa3d SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-03-14 16:47:05 +01:00
Luigi Toscano
2c88d42bd5 Fix terminology: "by KDE", not "for KDE"
"KDE" has been only the community for a while.
2017-03-14 00:30:03 +01:00
Jean-Baptiste Mardelle
ef61b5adf2 Fix compilation with last commit 2017-03-12 21:55:40 +01:00
Jean-Baptiste Mardelle
f3d6aa2dc3 Fix crash & corruption on dragging multiple clips in timeline, fix thread warning on monitor refresh 2017-03-12 21:54:33 +01:00
l10n daemon script
3c90778b2d SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-03-10 06:00:31 +01:00
Montel Laurent
a9b53833ed Minor optimization 2017-03-09 21:05:33 +01:00
Nicolas Carion
4a5cbe22ea Make profile refresh a real refresh 2017-03-09 17:58:23 +01:00
Nicolas Carion
53133bd07d Don't accept kdenliveSetting dialog if no profile selected 2017-03-09 16:39:21 +01:00
Nicolas Carion
6707f48a19 Don't accept projectSetting dialog if no profile selected 2017-03-09 16:13:04 +01:00
Nicolas Carion
8034bd3423 Redesign profile selection as a tree view with filters 2017-03-09 14:49:02 +01:00
Jean-Baptiste Mardelle
243545e4f0 Use the new KNotification feature to allow playing rendered file directly from Desktop notification 2017-03-07 22:03:44 +01:00
Jean-Baptiste Mardelle
cfef990488 Fix default render path corrupted on project reopening 2017-03-07 21:31:43 +01:00
Nicolas Carion
1e4dc2803e Using scoped enumerations in profilewidget 2017-03-07 02:51:01 +01:00
Nicolas Carion
9674c1fe6a Check on startup that default profile is valid, and ask user to set one if not. 2017-03-06 18:42:21 +01:00
Nicolas Carion
35af0b4af8 Fix BoolWidget not correctly initialized
CCBUG: 376150
2017-03-06 15:08:40 +01:00
Jean-Baptiste Mardelle
6bb4769193 Merge branch '16.12' 2017-03-06 13:10:46 +01:00
Nicolas Carion
5f6cc24d62 Avoid relying on xml to clone a clip in BinController
CCBUG: 377255
2017-03-06 12:44:06 +01:00
Jean-Baptiste Mardelle
463e9f8453 Avoid possible profile corruption with xml producer
CCBUG: 371189
2017-03-06 08:37:49 +01:00
Nicolas Carion
dc80cd7352 Avoid relying on xml to clone a clip.
CCBUG: 377255
2017-03-06 08:13:53 +01:00
Nicolas Carion
9d9010b017 Avoid relying on xml to clone a clip.
CCBUG: 377255
2017-03-06 02:57:51 +01:00
Michael Vogt
dbc6793d3f src/dvdwizard/dvdwizardmenu.cpp: do not show "grid" in output
The dvd wizard supports a "grid" to help positioning elements
and it displays small dots so that users can easily position and
align elements in the dvdwizard. This is nice but those are
currently also visible in the output in the dvd menu.

This is fixed by disabling the grid for the rendering.
BUG: 377256
2017-03-05 21:23:28 +01:00
Michael Vogt
76ceba1640 src/dvdwizard/dvdwizard.cpp: fix file loading in slotLoad
Files are stores in DvdWizard::slotSave() with .toLocalFile()
so we need to load them with QURL::fromLocalFile() so that they
are valid.

This fixes incorrect file loading in the dvd wizard.
BUG: 377254
2017-03-05 21:13:31 +01:00
Jean-Baptiste Mardelle
0f1f490cfc Fix Render Widget's file dialog not working correctly
(requires KDE Frameworks >= 5.33)
BUG: 371685
2017-03-05 21:07:55 +01:00
Yuri Chornoivan
2a93b292e3 Fix minor word repetitions 2017-03-05 09:48:39 +02:00
Jean-Baptiste Mardelle
28816933a3 Fix render job duration when past midnight
BUG: 372370
2017-03-04 18:24:17 +01:00
Jean-Baptiste Mardelle
d85742fcb1 Fix Bin Effect reset
BUG: 376494
2017-03-04 12:27:00 +01:00
Jean-Baptiste Mardelle
d68e3ad873 Bump MLT minimum version to 6.4.0 2017-03-04 11:50:03 +01:00
Albert Astals Cid
0e3f823288 GIT_SILENT Upgrade KDE Applications version to 16.12.3. 2017-03-04 11:25:34 +01:00
Montel Laurent
4cc55c1e71 Add QLatin1Char(...) 2017-03-02 08:12:13 +01:00
Montel Laurent
67890f6e58 Add more QStringLiteral 2017-03-02 08:09:16 +01:00
Nicolas Carion
5becbfc25e More variable reduction scope 2017-03-02 01:07:13 +01:00
Nicolas Carion
4d1b876722 More variable reduction scope and disable suspicious loop 2017-03-02 00:55:58 +01:00
Nicolas Carion
e05d4a5120 Reduce variable scopes and fix some potential bugs introduced by cc849dd090 2017-03-02 00:41:58 +01:00
Nicolas Carion
62a6a93d99 RenderWidget uses the new profile abstraction 2017-03-01 23:19:19 +01:00
Montel Laurent
3086e18529 Add more QStringLiteral 2017-03-01 06:59:49 +01:00
Vincent Pinon
e6f89c5336 Fix GCC warnings (float comparison) 2017-02-28 23:31:12 +01:00
Vincent Pinon
94f9c53ca4 Fix GCC warnings: fps switch logic (function still buggy) 2017-02-28 23:31:12 +01:00
Vincent Pinon
6bae786fa8 Fix document checker font replacement 2017-02-28 23:30:27 +01:00
Vincent Pinon
d198819b03 Fix GCC warnings: move bin internal classes away from header 2017-02-28 23:30:27 +01:00
Vincent Pinon
cc849dd090 Fix GCC warnings (variable masking) 2017-02-28 23:29:29 +01:00
Montel Laurent
14ff0d088e Add more QStringLiteral 2017-02-28 21:18:34 +01:00
l10n daemon script
8a5f3217ab GIT_SILENT made messages (after extraction) 2017-02-28 13:52:59 +01:00
Montel Laurent
b43c82a697 Add more QLatin1Char(...) 2017-02-28 13:28:05 +01:00
Montel Laurent
f874d52901 Add more QStringLiteral and co 2017-02-28 13:19:29 +01:00
l10n daemon script
1ea8ed36a1 GIT_SILENT made messages (after extraction) 2017-02-28 09:36:21 +01:00
Montel Laurent
38f6ab61d1 Add more QLatin1Char(..) 2017-02-28 09:00:20 +01:00
Montel Laurent
c7002c08ef Add more QLatin1Char/QStringLiteral 2017-02-28 08:54:46 +01:00
Montel Laurent
8f68095d67 Use QStringLiteral 2017-02-28 08:20:15 +01:00
Montel Laurent
646fbd0288 Add more QStringLiteral 2017-02-28 08:16:23 +01:00
Montel Laurent
ee9f3a4b1b Add QLatin1Char and co when necessary 2017-02-28 07:05:29 +01:00
Nicolas Carion
aada055669 backport comparison operators 2017-02-28 00:26:38 +01:00
Nicolas Carion
b6a4be7f01 Start reorganizing profile management 2017-02-28 00:03:13 +01:00
Montel Laurent
de9abfd108 Use QLatin1Char and other 2017-02-27 17:46:37 +01:00
Nicolas Carion
08b6b94bd3 Change some smart pointers 2017-02-27 15:29:40 +01:00
Nicolas Carion
98a2b68389 move factory creation in MltConnection and wrap unique_ptr around Mlt::Repository 2017-02-27 15:29:31 +01:00
Nicolas Carion
9cf0415590 Create the Mlt connection inside core init 2017-02-27 15:29:14 +01:00
Nicolas Carion
085a178ab4 move init logic to Core::initialize 2017-02-27 15:24:16 +01:00
Nicolas Carion
dbee17e590 Small switching to QScopedPointer 2017-02-27 15:15:50 +01:00
Montel Laurent
2d44d6e2b1 Add QLatin1Char when necessary 2017-02-27 13:59:18 +01:00
Montel Laurent
5957d784c8 Port some foreach 2017-02-27 13:30:27 +01:00
Montel Laurent
bcd643f27a Use QList::reserve here 2017-02-27 13:30:13 +01:00
Montel Laurent
8a56722c36 Port to for(...:...) 2017-02-27 09:01:51 +01:00
Montel Laurent
194880b170 Port some code to for(...:...) 2017-02-27 08:17:21 +01:00
Montel Laurent
5994a8172e Minor optimization 2017-02-25 00:28:22 +01:00
Montel Laurent
3de068e389 It's already checked previously 2017-02-24 13:25:19 +01:00
Montel Laurent
7d2676f4a0 It's endPos not startPos 2017-02-24 13:25:02 +01:00
Montel Laurent
caac06125f Fix some error reported by cppcheck 2017-02-24 13:24:35 +01:00
Montel Laurent
86ab24b0fd Minor optimization 2017-02-24 07:35:08 +01:00
Montel Laurent
b5a6cd8557 We depend against 5.6.0 2017-02-24 07:29:29 +01:00
Montel Laurent
bc796a104f Minor optimization 2017-02-24 07:22:29 +01:00
Montel Laurent
aba3aaf852 Minor optimization 2017-02-23 21:05:22 +01:00
Montel Laurent
6fc5a7eab5 Optimization don't use toPlaintext().isEmpty() => using
document()->isEmpty()
2017-02-23 13:26:53 +01:00
Montel Laurent
8b9fc20160 Use nullptr now 2017-02-21 07:01:40 +01:00
Montel Laurent
640d446755 Use qCDebug(...), fix pedantic 2017-02-16 13:36:47 +01:00
Montel Laurent
57a346a99f Fix error reported by cppcheck 2017-02-16 08:55:40 +01:00
Montel Laurent
6ceb498924 Make it const 2017-02-16 08:52:59 +01:00
Montel Laurent
7d1d20ab23 It was already initialize and it's a boolean not a int 2017-02-16 08:52:42 +01:00
l10n daemon script
4ca81a4b6f SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-02-16 05:59:29 +01:00
Jean-Baptiste Mardelle
a6ac89e1ad Fix unnecessary refresh of tools when selecting titler item 2017-02-16 00:44:52 +01:00
Montel Laurent
93fb8a9388 I think that we can increase qt version now 2017-02-15 08:41:20 +01:00
Montel Laurent
6edd85105a Remove some compile warning 2017-02-15 08:38:43 +01:00
Montel Laurent
f248ea0d64 Merge remote-tracking branch 'origin/Applications/16.12' 2017-02-15 08:26:16 +01:00
Jean-Baptiste Mardelle
6bb2cedaaa Fix compilation against recent cmake 2017-02-14 20:40:51 +01:00
l10n daemon script
2a94842ed5 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-02-14 14:45:39 +01:00
l10n daemon script
285493dc9b SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-02-14 12:58:12 +01:00
Vincent Pinon
aac49a1052 Merge remote-tracking branch 'launchpad/master' 2017-02-09 01:11:54 +01:00
Vincent Pinon
d6c6f4b88d Merge branch 'Applications/16.12' 2017-02-09 01:09:32 +01:00
Vincent Pinon
a5490e5609 Fix fadeouts re-appearing on clip cut+resize 2017-02-08 04:53:26 +01:00
Jean-Baptiste Mardelle
018de76858 Project archiving: fix color clips incorrectly detected and warn before overwriting project file 2017-02-06 23:42:09 +01:00
l10n daemon script
3963244907 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-02-06 06:04:53 +01:00
Jean-Baptiste Mardelle
9792a1b1cd Merge branch '16.12' 2017-02-05 23:55:08 +01:00
Jean-Baptiste Mardelle
6d71034c43 Fix crash on razor with multiple clips selected
BUG: 376082
2017-02-05 23:53:29 +01:00
Jean-Baptiste Mardelle
885fb4d0eb Workaround timeline crash caused by now fixed MLT issue (could be triggered by editing a title clip):
bf2749ab99
2017-02-05 23:03:11 +01:00
l10n daemon script
b34d0c0bb5 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-02-05 07:49:48 +01:00
Jean-Baptiste Mardelle
716c03967a Fix launchpad compilation 2017-02-04 16:43:28 +01:00
Jean-Baptiste Mardelle
adbdc888eb Merge branch '16.12' 2017-02-04 16:39:25 +01:00
Jean-Baptiste Mardelle
67257981b1 Fix various aspect ratio issues and transparency of composite transition in some cases 2017-02-04 16:32:01 +01:00
Jean-Baptiste Mardelle
e844edc049 Add option to add custom mime types for allowed clips
CCBUG: 364269
2017-02-04 11:10:21 +01:00
Albert Astals Cid
be60096748 GIT_SILENT Upgrade KDE Applications version to 16.12.2. 2017-02-03 23:50:38 +01:00
Jean-Baptiste Mardelle
91b268c272 Fix title clip items need to be selected twice before allowing move 2017-02-03 12:05:13 +01:00
l10n daemon script
323903cc4e SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-01-30 07:40:28 +01:00
l10n daemon script
7f9acd934c SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-01-30 06:01:58 +01:00
l10n daemon script
ccf1c9cda5 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-01-23 07:38:03 +01:00
l10n daemon script
436cccdb3c SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-01-23 05:46:25 +01:00
l10n daemon script
3d113980ac SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-01-22 07:24:34 +01:00
l10n daemon script
fab234a0ca SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-01-22 05:44:04 +01:00
Nicolas Carion
de5076402c Fix problem with keyframable effects
This reverts commit d083bc6cdf.
2017-01-20 19:08:29 +01:00
Jean-Baptiste Mardelle
464b1932ad Merge branch '16.12' 2017-01-20 18:26:27 +01:00
Jean-Baptiste Mardelle
048a3d7464 Fix crash when opening titler with movit GPU 2017-01-20 18:16:39 +01:00
Jean-Baptiste Mardelle
9aca0ee731 Fix play action not pausing when switching between subclips 2017-01-20 14:29:05 +01:00
Mikko Rapeli
f540402274 Fix playing Zone breaks monitor ruler length
BUG: 375163
2017-01-20 14:23:10 +01:00
Jean-Baptiste Mardelle
ccf21435d5 Merge branch '16.12' 2017-01-20 13:54:22 +01:00
Jean-Baptiste Mardelle
b9ccc837ef Fix typo breaking playlist clip expand 2017-01-20 13:51:31 +01:00
Jean-Baptiste Mardelle
901c3ecfd2 Fix extract frame not remembering folder 2017-01-20 13:51:05 +01:00
Jean-Baptiste Mardelle
7038cc063d Merge branch '16.12' 2017-01-20 01:16:42 +01:00
Jean-Baptiste Mardelle
754b8eeed8 Fix NVIDIA crash with GPU accel (movit) 2017-01-20 01:15:01 +01:00
Nicolas Carion
b4aff4564b Added some safety flags to compilation 2017-01-18 13:36:49 +01:00
Jean-Baptiste Mardelle
e5e7c6dad2 Merge branch '16.12' 2017-01-16 20:09:21 +01:00
Jean-Baptiste Mardelle
8a20fca86e Revert "Fix warning about QOffscreenSurface thread"
Caused startup crash on NVidia cards
CCBUG: 375094

This reverts commit 6675c4a509.
2017-01-16 20:06:24 +01:00
l10n daemon script
ad861ecce2 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-01-16 07:50:49 +01:00
l10n daemon script
5bb59c18fa SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-01-16 06:07:27 +01:00
l10n daemon script
a76a3d15b2 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-01-15 07:46:14 +01:00
l10n daemon script
5beb03dc62 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-01-15 06:09:38 +01:00
Jean-Baptiste Mardelle
54e3d416b6 Merge branch '16.12' 2017-01-12 22:40:06 +01:00
Jean-Baptiste Mardelle
0ce898669a Fix slideshow clips displayed as invalid when re-opening project
BUG: 374916
2017-01-12 22:29:32 +01:00
Nicolas Carion
044e2de97f Merge branch 'master' into refactoring_effects 2017-01-12 10:45:42 +01:00
Nicolas Carion
b1c3367e44 Remove more useless files 2017-01-11 13:21:01 +01:00
Nicolas Carion
a7dd596811 Update licences 2017-01-11 13:21:01 +01:00
Nicolas Carion
bd7512136d Replace empty string by QString() constructor 2017-01-11 13:21:01 +01:00
Nicolas Carion
6d6c4d0e5c [Curve] Change default to avoid printing pixmap 2017-01-11 13:21:01 +01:00
Jean-Baptiste Mardelle
00e8696417 Update copyright, update authors and mention FFmpeg in about data 2017-01-11 12:04:07 +01:00
Mikko Rapeli
65681183e2 Fixes cppcheck error:
[src/timeline/track.cpp:439]: (error) Memory leak: audioTrackProducer
2017-01-11 11:50:12 +01:00
Mikko Rapeli
df419e2f77 Fixes cppcheck warning:
[src/timeline/managers/trimmanager.cpp:30]: (warning) Member variable 'TrimManager::m_render' is not initialized in the constructor.
2017-01-11 11:48:23 +01:00
Mikko Rapeli
91bd4db97d Fixes cppcheck warning:
[src/timeline/managers/spacermanager.cpp:28]: (warning) Member variable 'SpacerManager::m_track' is not initialized in the constructor.
2017-01-11 11:47:58 +01:00
Mikko Rapeli
20a6397a72 Fixes cppcheck warning:
[src/timeline/managers/guidemanager.cpp:28]: (warning) Member variable 'GuideManager::m_dragGuide' is not initialized in the constructor.
2017-01-11 11:47:28 +01:00
Mikko Rapeli
0eb1d1ef8f Fixes cppcheck error:
[src/timeline/track.cpp:439]: (error) Memory leak: audioTrackProducer
2017-01-11 11:46:04 +01:00
Jean-Baptiste Mardelle
ae41447ba3 Fix curve widget scaling 2017-01-11 00:41:58 +01:00
Jean-Baptiste Mardelle
e7beb7e493 Merge branch '16.12' 2017-01-10 19:12:29 +01:00
Jean-Baptiste Mardelle
dd17aad744 Fix rendering when forcing resize or fps change
BUG: 374739
2017-01-10 19:06:45 +01:00
l10n daemon script
1b3f7ca7dd SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-01-10 14:25:13 +01:00
l10n daemon script
289124889d SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2017-01-10 12:14:25 +01:00
Nicolas Carion
39d29ca66b [Curves] add visual legend to the curve 2017-01-10 03:06:45 +01:00
Nicolas Carion
504c610465 [Curves] Draw border in all cases 2017-01-10 02:00:56 +01:00
Nicolas Carion
d083bc6cdf Get rid of redundant signal in KeyFrameEdit 2017-01-10 02:00:56 +01:00
Jean-Baptiste Mardelle
7ca503484a Fix issues with slideshow proxy
BUG: 374469
2017-01-10 00:14:30 +01:00
Jean-Baptiste Mardelle
7c322b1f5a Fix editing title or slideshow duration not updating project bin
BUG: 370902
2017-01-09 23:15:33 +01:00
Jean-Baptiste Mardelle
1b77f99a1d Correctly label missing playlists on document opening 2017-01-09 23:02:39 +01:00
Montel Laurent
aaa517e135 Add nullptr 2017-01-09 21:32:41 +01:00
Nicolas Carion
3d8174f938 Merge branch 'master' into refactoring_effects 2017-01-09 19:18:23 +01:00
Nicolas Carion
7f3b076219 [Curves] make grab zone circular and increase radius a bit 2017-01-09 18:52:27 +01:00
Nicolas Carion
7b83d618e0 remove know useless file 2017-01-09 18:41:55 +01:00
Nicolas Carion
eef687df68 Enable latest version of regular curve widget 2017-01-09 17:31:06 +01:00
Nicolas Carion
67ca675a23 Fix hardly seeable grid lines on curve widget with no pixmap on Dark theme 2017-01-09 17:00:49 +01:00
Montel Laurent
ebfaebb8ae now we can use nullptr 2017-01-09 13:47:52 +01:00
Montel Laurent
0f4fefe735 Use QLatin1Char(...) 2017-01-09 13:44:50 +01:00
Nicolas Carion
e0ef763c23 Center Curve widget 2017-01-09 12:37:21 +01:00
Nicolas Carion
f7e68e1481 Refactor of both curve widgets to expose the same kind of controls and avoid duplicate code 2017-01-09 12:23:08 +01:00
Montel Laurent
ca1218559c Use QLatin1Char 2017-01-09 09:00:54 +01:00
Montel Laurent
b505bf7dc4 Minor optimization 2017-01-09 06:44:20 +01:00
Jean-Baptiste Mardelle
01d7cff367 Merge branch '16.12' 2017-01-08 23:02:33 +01:00
Jean-Baptiste Mardelle
a5d8c86d87 Fix typo 2017-01-08 23:01:27 +01:00
Jean-Baptiste Mardelle
5f8a15749e Merge branch '16.12' 2017-01-08 23:00:22 +01:00
Jean-Baptiste Mardelle
0f367c64c2 Move away from QUrl, use toLocalFile() instead of path() when requested 2017-01-08 22:19:28 +01:00
Jean-Baptiste Mardelle
6cd4e4652a Merge branch '16.12' 2017-01-08 16:01:18 +01:00
Jean-Baptiste Mardelle
d9bd1c5617 Adjust downloadable categories names (changed in store.kde.org) 2017-01-08 16:00:26 +01:00
Jean-Baptiste Mardelle
66d9cc77c7 Merge branch '16.12' 2017-01-08 14:11:21 +01:00
Jean-Baptiste Mardelle
fa4acc48e1 Fix various titler bugs (pasting breaks color & font, incorrect selection)
BUG: 374614
2017-01-08 14:05:16 +01:00
Jean-Baptiste Mardelle
c27117f07b Fix creation of project profile with messy fps
BUG: 374613
2017-01-08 12:23:24 +01:00
Jean-Baptiste Mardelle
300b89d09a Merge branch '16.12' 2017-01-08 00:32:20 +01:00
Jean-Baptiste Mardelle
e65fb6559a Windows: fix locale issues 2017-01-08 00:24:45 +01:00
Albert Astals Cid
bf39dd92fd GIT_SILENT Upgrade KDE Applications version to 16.12.1. 2017-01-07 20:01:05 +01:00
Jean-Baptiste Mardelle
821e48b71a More path fixes (make sure we don't insert double slash in path) 2017-01-06 13:02:25 +01:00
Nicolas Carion
d4fd601f76 Fix typo introduced in a97e13d9f1 2017-01-06 12:49:06 +01:00
Jean-Baptiste Mardelle
2055908377 Merge branch '16.12' 2017-01-06 12:37:18 +01:00
Jean-Baptiste Mardelle
5029631606 Fix another possible corruption when relocating project folder 2017-01-06 12:36:32 +01:00
Jean-Baptiste Mardelle
58d0fec879 Merge branch '16.12' 2017-01-06 12:21:14 +01:00
Jean-Baptiste Mardelle
fd4cad470f Fix possible corruption on document saving (slash prepended to filename)
CCBUG: 374624
2017-01-06 12:19:40 +01:00
Nicolas Carion
a97e13d9f1 Force curves widget to be square 2017-01-06 11:18:04 +01:00
Nicolas Carion
66593a3c0b Better heuristic for adding points on bezier spline 2017-01-06 11:18:04 +01:00
Nicolas Carion
33390b9216 remove uneeded abstract class 2017-01-06 11:18:04 +01:00
Nicolas Carion
a21fc260c9 More refactoring of Curve related classes 2017-01-06 11:18:04 +01:00
Nicolas Carion
642ba318f7 Better file organization for curve related code 2017-01-06 11:18:04 +01:00
Nicolas Carion
410dab86e2 Refactoring curve widgets into a common base class 2017-01-06 11:18:04 +01:00
Nicolas Carion
146d64ad95 Better handling of extremal points in Bezier Curve widget 2017-01-06 11:18:04 +01:00
Nicolas Carion
b685b1c5a7 Add option to delete keypoint in Bezier widget 2017-01-06 11:18:04 +01:00
Nicolas Carion
10abf7711e Add base class to position parameter 2017-01-06 11:18:04 +01:00
Nicolas Carion
558cc924f6 Improve design of ColorPicker and add base-class
The deprecated displayMessage mechanism from parameterContainer has been removed.
2017-01-06 11:18:04 +01:00
Nicolas Carion
5980ee5cbd Add baseclass to Keyframe, Animation and Geometry parameters 2017-01-06 11:18:04 +01:00
Nicolas Carion
c49fec1246 removing deprecated geometry widget 2017-01-06 11:18:04 +01:00
Nicolas Carion
9bb0e6100d Add base class to boolParam 2017-01-06 11:18:04 +01:00
Nicolas Carion
33f8be2d6a Add base class to listParam 2017-01-06 11:18:04 +01:00
Nicolas Carion
cd5949f3ca Move DraggableLabel in its own class and add base class to DoubleParameterWidget 2017-01-06 11:14:07 +01:00
Jean-Baptiste Mardelle
c129ceb938 Fix slideshow animation lost on non english language
BUG: 374612
2017-01-06 10:50:11 +01:00
Jean-Baptiste Mardelle
7b28694ec9 Fix slideshow animation lost on non english language
BUG: 374612
2017-01-06 10:27:05 +01:00
Montel Laurent
7420982988 Minor optimization 2017-01-06 08:16:20 +01:00
Jean-Baptiste Mardelle
5e7a6175f5 Merge branch '16.12' 2017-01-05 21:51:33 +01:00
Jean-Baptiste Mardelle
bd60a7ea0a Re-introduce transparency slider in titler background color 2017-01-05 21:46:21 +01:00
Jean-Baptiste Mardelle
3c6d6c586a Cleanup mini timeline and keyframes in rotoscoping widget 2017-01-05 21:45:50 +01:00
Jean-Baptiste Mardelle
56fc5643e3 Merge branch '16.12' 2017-01-05 18:42:06 +01:00
Jean-Baptiste Mardelle
f71d36d64e rotoscoping: fix color, icons and control point activation 2017-01-05 18:35:35 +01:00
Jean-Baptiste Mardelle
cfc84c0bbb Fix possible issue when opening moved project 2017-01-05 17:56:30 +01:00
Jean-Baptiste Mardelle
f8dbbcbbaf Merge branch '16.12' 2017-01-05 11:38:38 +01:00
Jean-Baptiste Mardelle
c521fb5a61 Fix possible corruption when opening doc with slowmotion clip 2017-01-05 11:20:44 +01:00
Jean-Baptiste Mardelle
304168ef1b Merge branch '16.12' 2017-01-05 10:56:42 +01:00
Montel Laurent
c8b23c8aa9 Use QLatin1Char 2017-01-04 22:38:41 +01:00
Montel Laurent
11cd094f5d Use QLatin1Char here 2017-01-04 13:54:46 +01:00
Montel Laurent
6091033f08 Use QLatin1Char(...) when possible 2017-01-04 13:40:43 +01:00
Jean-Baptiste Mardelle
ffd6c38382 Fix path & lookup for pattern in slideshow 2017-01-04 11:25:45 +01:00
Jean-Baptiste Mardelle
3aaa60e132 Fix size slider not updating in animated parameter 2017-01-04 11:25:07 +01:00
Montel Laurent
ca6df84efa increase minimum requires 2017-01-04 07:39:29 +01:00
Jean-Baptiste Mardelle
7da7e9f223 Merge branch '16.12' 2017-01-03 21:10:20 +01:00
Jean-Baptiste Mardelle
52c26b59ea Windows: more path fixes (including luma files on document opening) 2017-01-03 21:00:15 +01:00
Jean-Baptiste Mardelle
066663aa38 Merge branch '16.12' 2017-01-03 16:33:45 +01:00
Jean-Baptiste Mardelle
8e7615f816 When possible, enforce breeze or fusion style on Windows (fixes color issues) 2017-01-03 16:25:47 +01:00
Jean-Baptiste Mardelle
145f7819cc Fix standard DV profile not selectable unless clicking on interlace 2017-01-03 15:23:15 +01:00
Jean-Baptiste Mardelle
8bad47f29a Fix crash on profile change
BUG: 374370
2017-01-03 15:13:39 +01:00
Jean-Baptiste Mardelle
320ad3a0b8 Merge branch 'Applications/16.12' of git://anongit.kde.org/kdenlive into 16.12 2017-01-03 00:12:33 +01:00
Jean-Baptiste Mardelle
b5130e9e2f Switch to frei0r.alphagrad for effect compare (faster & available on Windows) 2017-01-03 00:04:36 +01:00
Jean-Baptiste Mardelle
0eb2bd260d Warn before deleting used clips 2017-01-02 21:54:24 +01:00
Jean-Baptiste Mardelle
e513a72285 QUrl::path to QUrl::toLocalFile 2017-01-02 18:29:48 +01:00
Jean-Baptiste Mardelle
d88d8ccad4 Change minimum timeline height from 200 to 100
BUG: 374449
2017-01-02 14:36:07 +01:00
Jean-Baptiste Mardelle
89016de081 Merge branch '16.12' 2017-01-02 14:06:32 +01:00
Jean-Baptiste Mardelle
eeb243befb Windows: Fix cache folder creation 2017-01-02 14:05:41 +01:00
Jean-Baptiste Mardelle
ee67f384ac disable delete tmp folder button if no folder exists 2017-01-01 12:22:22 +01:00
Jean-Baptiste Mardelle
6d0ab5ed59 Merge branch '16.12' 2016-12-31 10:31:36 +01:00
Jean-Baptiste Mardelle
a1d12b36ef Fix timeline zone on new projects
BUG: 374373
2016-12-31 10:25:08 +01:00
Jean-Baptiste Mardelle
7f591a4ab3 Merge branch '16.12' 2016-12-31 01:40:15 +01:00
Jean-Baptiste Mardelle
33fdfb59c4 Fix LC_NUMERIC not set on Windows 2016-12-30 23:16:34 +01:00
Montel Laurent
eb8eae954f Avoid empty string 2016-12-30 21:46:44 +01:00
Montel Laurent
003493e600 Reserve memory 2016-12-30 21:46:26 +01:00
Montel Laurent
74ffe48ba6 Fix warning 2016-12-30 21:45:58 +01:00
Jean-Baptiste Mardelle
adacd132d2 Windows: fix generators 2016-12-30 19:02:08 +01:00
Jean-Baptiste Mardelle
4e940fd0b1 Windows: fix save existing document and clips paths in project settings 2016-12-30 18:54:09 +01:00
Yuri Chornoivan
ee42b04c54 Fix various minor issues (typos) 2016-12-29 19:20:29 +02:00
Jean-Baptiste Mardelle
8ce8be3e49 Merge branch '16.12' 2016-12-28 17:31:45 +01:00
Jean-Baptiste Mardelle
2da31e120c Windows: fix audio thumbs 2016-12-28 17:26:36 +01:00
Jean-Baptiste Mardelle
af37aa8916 Merge branch '16.12' 2016-12-28 15:31:47 +01:00
Jean-Baptiste Mardelle
6675c4a509 Fix warning about QOffscreenSurface thread
BUG: 374095
2016-12-28 15:29:00 +01:00
Jean-Baptiste Mardelle
308f4b35f9 Fix merge mess again 2016-12-28 14:34:46 +01:00
Jean-Baptiste Mardelle
350cadb9dc Merge branch '16.12' 2016-12-28 14:31:26 +01:00
Jean-Baptiste Mardelle
1548c706f8 Fix remaining conflicts from previous merge 2016-12-28 11:17:41 +01:00
Jean-Baptiste Mardelle
c0bd633279 Use AppDataLocation instead of deprecated DataLocation, remove useless Windows hack 2016-12-28 11:16:12 +01:00
Jean-Baptiste Mardelle
da7a664e77 Fix translation of wizard warning 2016-12-28 11:06:04 +01:00
Jean-Baptiste Mardelle
107adf6c57 Use AppDataLocation instead of deprecated DataLocation, remove useless Windows hack 2016-12-28 10:45:09 +01:00
Jean-Baptiste Mardelle
ca6d64ba4d Fix translation of wizard warning 2016-12-28 09:37:12 +01:00
Montel Laurent
a556c5419d Use QLatin1Char 2016-12-28 07:38:39 +01:00
Jean-Baptiste Mardelle
00145c83bb Merge branch '16.12' 2016-12-28 00:00:46 +01:00
Jean-Baptiste Mardelle
75ce48af06 Fix kioslaves on Windows 2016-12-27 23:59:31 +01:00
Jean-Baptiste Mardelle
0e95ef55ab Fix typo in previous commit 2016-12-27 20:17:06 +01:00
Jean-Baptiste Mardelle
bbfbba30de Merge branch '16.12' 2016-12-27 20:12:46 +01:00
Jean-Baptiste Mardelle
f7c16c06ed Windows: fix project opening 2016-12-27 20:03:04 +01:00
Jean-Baptiste Mardelle
2dd46fc86a Fix Windows paths (export profile, renderer, etc) 2016-12-27 19:46:36 +01:00
Montel Laurent
7edc7aaece Minor optimization 2016-12-27 08:53:13 +01:00
Montel Laurent
5f4a59aea4 Use QLatin1Char here 2016-12-27 08:48:21 +01:00
Montel Laurent
26aab953a2 Use QLatin1Char here 2016-12-27 08:36:30 +01:00
Montel Laurent
7dfa30a754 Use remove 2016-12-27 07:00:56 +01:00
Jean-Baptiste Mardelle
137d5c7566 Merge branch '16.12' 2016-12-23 16:06:41 +01:00
Jean-Baptiste Mardelle
f864233ac1 Check FFmpeg's executable in same folder as MLT first.
Display informative error if a clip job fails because FFmpeg not found
CCBUG: 373889
2016-12-23 16:05:54 +01:00
Montel Laurent
8283cc1626 Use isEmpty() when possible 2016-12-22 08:13:26 +01:00
Jean-Baptiste Mardelle
f4442a5748 Merge branch '16.12' 2016-12-20 22:03:34 +01:00
Jean-Baptiste Mardelle
69220ab2e0 Fix dbus communication broken by recent move of KDBusService
BUG: 367875
2016-12-20 22:00:36 +01:00
Montel Laurent
b839790a48 Start to port to for(... : ...) c++ loop iterator + make const some
variables
2016-12-20 17:32:20 +01:00
l10n daemon script
70ab5a9728 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2016-12-20 13:07:31 +01:00
l10n daemon script
96bd4403ab GIT_SILENT made messages (after extraction) 2016-12-20 09:24:03 +01:00
Montel Laurent
e8b49071ec Remove unused variables 2016-12-17 17:39:24 +01:00
Jean-Baptiste Mardelle
d07325aca8 Move DBus and force icon theme above KAboutData
CCBUG: 373531
2016-12-17 10:43:38 +01:00
Jean-Baptiste Mardelle
215457f670 Move DBus and force icon theme above KAboutData
CCBUG: 373531
2016-12-17 10:42:40 +01:00
Montel Laurent
a3982da33e not necessary to check pointer before to delete it in c++ 2016-12-16 21:29:48 +01:00
Jean-Baptiste Mardelle
a8013449ac Merge branch '16.12' 2016-12-16 14:28:23 +01:00
Jean-Baptiste Mardelle
3db3711710 Fix "go to previous keyframe" not going to clip start if no keyframe at start
Disable next / previous keyframe buttons when irrelevant
Always focus project monitor when clicking in timeline
2016-12-16 14:23:42 +01:00
Jean-Baptiste Mardelle
3ce0217cfd Merge branch '16.12' 2016-12-16 00:42:29 +01:00
Jean-Baptiste Mardelle
d5fcba999d Fix image / color clips if defaut duration is set to 1 frame 2016-12-16 00:35:22 +01:00
Jean-Baptiste Mardelle
5decf0f940 Merge branch '16.12' 2016-12-15 22:56:41 +01:00
Jean-Baptiste Mardelle
0e8f6e7f9e Middle-click + move now pans title and monitor scene
Fix various issue with zoom
CCBUG: 358178
2016-12-15 22:53:14 +01:00
Jean-Baptiste Mardelle
c73227f944 Merge branch '16.12' 2016-12-15 19:48:04 +01:00
Jean-Baptiste Mardelle
2b7a70dd01 Fix bin closing on fps change
BUG: 373534
2016-12-15 19:02:52 +01:00
Vincent Pinon
c20e0b9b62 Merge branch 'Applications/16.12' 2016-12-15 06:51:23 +01:00
Vincent Pinon
f966f2d956 Fix detection of MLT in current directory (Windows) 2016-12-14 23:52:49 +01:00
Jean-Baptiste Mardelle
46b741dbbb Merge branch '16.12' 2016-12-13 22:00:00 +01:00
Jean-Baptiste Mardelle
dc610b0484 Fix recent regression (left click in monitor not doing play/pause) 2016-12-13 21:56:45 +01:00
Montel Laurent
80798cd80c Using Reserve method 2016-12-13 08:55:23 +01:00
Montel Laurent
0d0d58611c Add ref 2016-12-13 08:18:14 +01:00
Montel Laurent
8a6943abae Indent/Cleanup 2016-12-13 08:08:35 +01:00
Montel Laurent
aa29a55a9f Sudo is when we want to install as root 2016-12-13 07:58:26 +01:00
Montel Laurent
76efbff6d9 Use QString() directly 2016-12-12 22:13:49 +01:00
Montel Laurent
c1714aa83b Move enum in class name directly. 2016-12-12 22:13:30 +01:00
Montel Laurent
7bdb18da7e Coding style 2016-12-12 08:53:59 +01:00
Jean-Baptiste Mardelle
5b53736469 Fix compilation on some systems 2016-12-12 08:24:30 +01:00
Montel Laurent
b4182c3502 USe const'ref in some signals 2016-12-12 08:19:29 +01:00
Montel Laurent
141c6f1e9a USe const'ref here too 2016-12-12 08:13:45 +01:00
Jean-Baptiste Mardelle
402a7c5a46 Merge branch '16.12' 2016-12-11 21:24:53 +01:00
Jean-Baptiste Mardelle
61362b9cb8 Fix timeline guide uneditable when over clip
BUG: 373463
2016-12-11 21:18:24 +01:00
Jean-Baptiste Mardelle
55af0d719f Merge branch '16.12' 2016-12-11 18:56:02 +01:00
Jean-Baptiste Mardelle
c19b8b060b Fix title clip multiple selection
CTRL + click + mouse move scrolls the view in zoomed mode in title widget and monitor scene
BUG: 358178
2016-12-11 16:25:56 +01:00
Montel Laurent
cafc765b7f We can increase a little dependancy for 17.04 2016-12-11 10:43:59 +01:00
Montel Laurent
072d51ab05 Astyle kdelibs 2016-12-11 10:37:20 +01:00
Montel Laurent
ce4959442a Merge remote-tracking branch 'origin/Applications/16.12' 2016-12-11 10:35:29 +01:00
Vincent Pinon
c4f1aa9d82 Load KIconTheme after DBus start (fix Windows icons) 2016-12-10 14:48:17 +01:00
Jean-Baptiste Mardelle
10b08d573c Fix timeline cursor offset after changing track height
BUG: 373468
2016-12-09 17:44:10 +01:00
Montel Laurent
214a4bda8d Coding style 2016-12-09 14:02:22 +01:00
Jean-Baptiste Mardelle
919d26a765 Do not reset keyframe type when editing effect with only one keyframe 2016-12-09 13:44:40 +01:00
Jean-Baptiste Mardelle
48d70a685c fix compilation 2016-12-09 12:00:14 +01:00
Jean-Baptiste Mardelle
03b5afb47b Disable trim window shortcut since feature is unstable 2016-12-09 07:59:12 +01:00
Montel Laurent
5f7ac07e0b Coding style 2016-12-09 07:47:28 +01:00
Montel Laurent
b91cb4fbce Add const'ref 2016-12-09 07:44:58 +01:00
Montel Laurent
72431b3a5c Minor optimization 2016-12-09 07:39:23 +01:00
Montel Laurent
e0d50496a4 Make code more readable 2016-12-08 22:54:37 +01:00
Montel Laurent
8de5263e30 Merge remote-tracking branch 'origin/Applications/16.12' 2016-12-08 15:40:58 +01:00
Montel Laurent
ed60ba9ebf Clean up code. const'ify some method 2016-12-08 13:37:49 +01:00
Montel Laurent
1ac705b479 Fix signal/slot. Make sure to delete dialog. Clean up 2016-12-08 13:29:26 +01:00
Montel Laurent
bc229faf16 const'ref 2016-12-08 13:29:11 +01:00
Montel Laurent
721e8bc19c Why create this dialog at the beginning ? Create this one when we need
it
2016-12-08 13:28:27 +01:00
Montel Laurent
a22c0e966b Merge remote-tracking branch 'origin/Applications/16.12' 2016-12-08 09:16:22 +01:00
Jean-Baptiste Mardelle
1c4d36900a Merge branch '16.12' 2016-12-08 00:09:18 +01:00
Montel Laurent
672e613b18 not necessary to check pointer before to delete it 2016-12-07 21:10:04 +01:00
Montel Laurent
98ad484674 Merge remote-tracking branch 'origin/Applications/16.12' 2016-12-07 13:35:23 +01:00
Montel Laurent
0da9218823 Reindent code 2016-12-07 08:16:38 +01:00
Montel Laurent
953eb3517c Minor optimization 2016-12-07 06:52:34 +01:00
Montel Laurent
9edbacf9ae Merge remote-tracking branch 'origin/Applications/16.12' 2016-12-07 06:41:38 +01:00
Montel Laurent
d68176ff42 Merge remote-tracking branch 'origin/Applications/16.12' 2016-12-06 17:27:38 +01:00
Montel Laurent
57c7db1e24 Use some const'ref. Clean up code. Minor optimization 2016-12-06 13:37:18 +01:00
Montel Laurent
80e81db556 Reindent make it more easy to read code 2016-12-06 08:22:06 +01:00
Montel Laurent
6a374fe38c Coding style 2016-12-06 08:14:14 +01:00
Jean-Baptiste Mardelle
5c195bfa01 Merge branch '16.12' 2016-12-05 21:32:35 +01:00
Montel Laurent
a728575a03 Merge remote-tracking branch 'origin/Applications/16.12' 2016-12-05 21:14:13 +01:00
Montel Laurent
838c68a94a Reindent some code to make it more easy to reading 2016-12-05 13:57:06 +01:00
Montel Laurent
c005801b18 Minor optimization 2016-12-05 13:17:50 +01:00
Montel Laurent
8cf11bf25b normalize signal/slot 2016-12-05 13:12:06 +01:00
Montel Laurent
71320e4a63 Make it compiles 2016-12-05 12:32:03 +01:00
Jean-Baptiste Mardelle
f895c949fd Merge branch '16.12' 2016-12-05 08:36:43 +01:00
Jean-Baptiste Mardelle
4f35b9b330 Merge branch '16.12' 2016-12-04 18:05:54 +01:00
Montel Laurent
5d526a9e8c Use isEmpty 2016-12-04 08:29:57 +01:00
Montel Laurent
9f46cd434e Use isEmpty() => optimization 2016-12-03 18:46:25 +01:00
Montel Laurent
b3b7f127a5 Use const'ref 2016-12-03 18:41:41 +01:00
Montel Laurent
cc92d90e1f Minor optimization 2016-12-03 18:35:41 +01:00
Montel Laurent
0837ceec9e Optimization use const'ref 2016-12-03 18:26:26 +01:00
Montel Laurent
31ffe13c7e Remove duplicate properties 2016-12-03 18:04:27 +01:00
Montel Laurent
dca177f2b7 Minor optimization 2016-12-02 23:20:14 +01:00
Jean-Baptiste Mardelle
32dc21d247 Merge branch '16.12' 2016-12-02 14:54:38 +01:00
Montel Laurent
79b2ad081c an i18n is a QString 2016-12-02 14:00:42 +01:00
Montel Laurent
d240a40e9c Const'ify 2016-12-02 14:00:36 +01:00
Montel Laurent
ed33893376 Reindent a little. Make more easy to read 2016-12-02 13:56:54 +01:00
Montel Laurent
7c5f81f0df Use debug categories 2016-12-02 13:15:12 +01:00
Montel Laurent
a0bd88a21a It was used in qt4 2016-12-02 07:02:18 +01:00
Montel Laurent
32b06bd62e Clean up includes 2016-12-02 07:00:38 +01:00
Montel Laurent
7b043f79f1 Merge remote-tracking branch 'origin/Applications/16.12' 2016-12-01 21:14:21 +01:00
Montel Laurent
5832bbc76b Minor 2016-12-01 21:13:41 +01:00
Montel Laurent
d12d3daaa4 Use new connect api 2016-12-01 16:18:33 +01:00
Montel Laurent
e5fc13f65b Use new connect api 2016-12-01 16:07:57 +01:00
Montel Laurent
ecd38111e9 Fix some other clazy warning 2016-12-01 13:53:34 +01:00
Montel Laurent
3acc1e50b1 Add more const'ref 2016-12-01 13:47:37 +01:00
Montel Laurent
f59659f0f3 Fix some other clazy warning 2016-12-01 07:14:39 +01:00
Montel Laurent
55234ae8df Use const'ref here too 2016-12-01 06:47:59 +01:00
Jean-Baptiste Mardelle
d6b00054aa Merge branch '16.12' 2016-12-01 00:16:10 +01:00
Montel Laurent
effa6bf49a Use const'ref 2016-11-30 21:32:00 +01:00
Montel Laurent
fe293eca4b Continue to add const'ref 2016-11-30 21:18:34 +01:00
Montel Laurent
52fd330b48 I think that we can increase qt version requires 2016-11-30 13:39:01 +01:00
Montel Laurent
c63711060c now it's not necessary as it's in kde release 2016-11-30 13:36:47 +01:00
Montel Laurent
adc13aab53 Clean up forward declaration 2016-11-30 13:33:55 +01:00
Montel Laurent
90e17b9d6e Fix some clazy warning 2016-11-30 12:51:53 +01:00
Montel Laurent
bcfc2e85f6 continue to fix using const'ref 2016-11-30 09:01:25 +01:00
Montel Laurent
544076665e USe const'ref here too 2016-11-30 07:03:08 +01:00
Montel Laurent
13b2d9d2f9 Use const'ref 2016-11-29 21:38:45 +01:00
Montel Laurent
f3cc628a57 Remove unused variable. Use new connect signal/slot. USe const'ref 2016-11-29 13:13:08 +01:00
Montel Laurent
ecc832968a Remove duplicate entry 2016-11-29 13:12:55 +01:00
Jean-Baptiste Mardelle
d066c5357d When adding a playlist clip in a project, check for missing files inside it 2016-11-29 09:01:13 +01:00
Montel Laurent
48f6e7488e Add Q_DECL_OVERRIDE 2016-11-29 06:50:36 +01:00
Montel Laurent
e563599910 continue to fix const'ref 2016-11-29 06:40:29 +01:00
Jean-Baptiste Mardelle
cbca2a8cfe Merge branch '16.12' 2016-11-29 01:42:33 +01:00
Montel Laurent
206f776ac1 USe const'ref here too 2016-11-28 20:45:57 +01:00
Jean-Baptiste Mardelle
7b421d59b3 Merge branch '16.12' 2016-11-28 17:22:27 +01:00
Montel Laurent
b2fb46c5b0 Use const'ref 2016-11-28 14:16:22 +01:00
Montel Laurent
750747d877 USe const'ref 2016-11-28 08:23:39 +01:00
Montel Laurent
c897b82d53 Merge remote-tracking branch 'origin/Applications/16.12' 2016-11-28 06:54:31 +01:00
Montel Laurent
fa6a4660a8 Remove some unused variable 2016-11-28 06:54:07 +01:00
Montel Laurent
99a26ddd65 Use const'ref 2016-11-27 21:22:49 +01:00
Montel Laurent
6048a896ec Use Q_NULLPTR reduce the number of compile warning 2016-11-27 21:17:33 +01:00
Montel Laurent
5b5e286ab5 Fix other clazy warning 2016-11-27 21:11:02 +01:00
Montel Laurent
40ec3b2220 Merge remote-tracking branch 'origin/Applications/16.12' 2016-11-27 20:40:04 +01:00
Montel Laurent
d780c9f1f4 Fix other clazy warning 2016-11-27 18:34:15 +01:00
Montel Laurent
ef46d1c5e0 Use const'ref 2016-11-27 18:25:36 +01:00
Montel Laurent
4bce043263 Fix some clazy warning 2016-11-27 15:49:53 +01:00
Montel Laurent
6ad30daeef Merge remote-tracking branch 'origin/Applications/16.12' 2016-11-27 14:54:58 +01:00
Montel Laurent
33584fa506 Remove some warning with -Wzero-as-null-pointer-constant 2016-11-27 14:54:17 +01:00
R.J.V. Bertin
a09d52cf0f Provide application icon on Mac/MS Window.
Also build kdenlive_render as non-gui (= standard executable on Mac).
2016-11-22 18:32:53 +01:00
Jean-Baptiste Mardelle
d4737d26e3 Merge branch '16.12' 2016-11-21 20:12:24 +01:00
Jean-Baptiste Mardelle
4dcab81daf Merge branch '16.12' 2016-11-21 19:28:15 +01:00
Jean-Baptiste Mardelle
3bf5484a12 Merge branch 'master' of git://anongit.kde.org/kdenlive 2016-11-20 15:29:56 +01:00
Jean-Baptiste Mardelle
8acb04c040 Fix moving tmp data when changing project tmp folder, fix location of global tmp data in widget when using custom location in current project 2016-11-20 14:51:37 +01:00
Jean-Baptiste Mardelle
70cf8089e9 Fix random keyframe type when adding composite & transform transition 2016-11-20 14:18:49 +01:00
Jean-Baptiste Mardelle
51c889c7f4 Fix error preventing setting an interlaced default project profile
CCBUG: 372588
2016-11-20 13:30:40 +01:00
Pino Toscano
065eefafd7 i18n: "Ok" -> "OK" 2016-11-20 11:16:30 +01:00
Jean-Baptiste Mardelle
b270dcaf24 Do not cache supported codecs / formats
Fix slideshow image count message when no image found
2016-11-19 23:58:05 +01:00
Jean-Baptiste Mardelle
e16c303b9d Fix missing codec detection in render widget 2016-11-19 12:47:44 +01:00
Jean-Baptiste Mardelle
5964cf8d9e Fix progressbar still visible after project open 2016-11-18 10:48:25 +01:00
Jean-Baptiste Mardelle
94e1473fc4 Fix animated geometry scale not correctly updated (composite & transform)
Fix transition not deselected when clicking in empty timeline
2016-11-18 10:30:17 +01:00
Albert Astals Cid
2bd2058627 GIT_SILENT Upgrade KDE Applications version to 17.03.70. 2016-11-16 00:22:30 +01:00
Jean-Baptiste Mardelle
12217947db Fix undo grouping broken
CCBUG: 370653
2016-11-15 23:51:32 +01:00
558 changed files with 33604 additions and 26206 deletions

4
.arcconfig Normal file
View File

@@ -0,0 +1,4 @@
{
"project.name" : "Kdenlive",
"phabricator.uri" : "https://phabricator.kde.org/"
}

26
AUTHORS
View File

@@ -1,23 +1,23 @@
Active Kdenlive authors
Vincent Pinon <vpinon@april.org>
Bugs fixing, release
2012-present
Jean-Baptiste Mardelle <jb@kdenlive.org>
MLT and KDE SC 4 porting, main developer
Main developer and maintainer, MLT and KDE SC 4 / KF5 port,
2005-present
Laurent Montel <montel@kde.org>
Bugs fixing, code clean up, review
2013-present
Till Theato <root@ttill.de>
Bug fixing, etc.
2010-present
Steve Guilford <s.guilford@dbplugins.com>
Bug fixing
2014
Vincent Pinon <vpinon@kde.org>
Interim maintainer, Windows cross-build, KF5 port, profiles updates, etc.
2012-present
Former Kdenlive authors
Laurent Montel <montel@kde.org>
Bugs fixing, code clean up, review
2013-2017
Till Theato <root@ttill.de>
Bug fixing, etc.
2010-2015
Steve Guilford <s.guilford@dbplugins.com>
Bug fixing
2014
Simon A. Eugster (Granjow) <simon.eu@gmail.com>
Colour and audio scopes, titler, manual, bug fixing, etc.
2009-2012

View File

@@ -4,32 +4,38 @@ project(Kdenlive)
# stable release. An additional number can be used for bugfix-only releases.
# KDE Application Version, managed by release script
set (KDE_APPLICATIONS_VERSION_MAJOR "16")
set (KDE_APPLICATIONS_VERSION_MAJOR "18")
set (KDE_APPLICATIONS_VERSION_MINOR "12")
set (KDE_APPLICATIONS_VERSION_MICRO "0")
set(KDENLIVE_VERSION ${KDE_APPLICATIONS_VERSION_MAJOR}.${KDE_APPLICATIONS_VERSION_MINOR}.${KDE_APPLICATIONS_VERSION_MICRO})
cmake_minimum_required(VERSION 2.8.12)
cmake_minimum_required(VERSION 3.0)
if(POLICY CMP0063)
cmake_policy(SET CMP0063 NEW)
endif()
if (POLICY CMP0053)
cmake_policy(SET CMP0053 NEW)
endif()
# Minimum versions of main dependencies.
set(MLT_MIN_MAJOR_VERSION 6)
set(MLT_MIN_MINOR_VERSION 0)
set(MLT_MIN_MINOR_VERSION 10)
set(MLT_MIN_PATCH_VERSION 0)
set(MLT_MIN_VERSION ${MLT_MIN_MAJOR_VERSION}.${MLT_MIN_MINOR_VERSION}.${MLT_MIN_PATCH_VERSION})
set(QT_MIN_VERSION 5.2.0)
set(QT_MIN_VERSION 5.6.0)
find_package(ECM 1.2.0 REQUIRED CONFIG)
find_package(ECM 5.18.0 REQUIRED CONFIG)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/modules)
include(KDECompilerSettings NO_POLICY_SCOPE)
include(FeatureSummary)
include(ECMInstallIcons)
include(GenerateExportHeader)
include(KDEInstallDirs)
include(KDECMakeSettings)
include(KDECompilerSettings)
include(ECMOptionalAddSubdirectory)
include(ECMMarkNonGuiExecutable)
include(ECMAddAppIcon)
include(ECMQtDeclareLoggingCategory)
add_definitions(-DQT_NO_CAST_TO_ASCII)
add_definitions(-DQT_NO_URL_CAST_FROM_STRING)
@@ -37,7 +43,6 @@ add_definitions(-DTRANSLATION_DOMAIN=\"kdenlive\")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH})
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
# To be switched on when releasing.
option(RELEASE_BUILD "Remove Git revision from program version (use for stable releases)" ON)
@@ -73,7 +78,7 @@ include(CheckIncludeFiles)
check_include_files(malloc.h HAVE_MALLOC_H)
check_include_files(pthread.h HAVE_PTHREAD_H)
find_package(Qt5 REQUIRED COMPONENTS Core DBus Widgets Script Svg Quick )
find_package(Qt5 REQUIRED COMPONENTS Core DBus Widgets Script Svg Quick Concurrent)
find_package(Qt5 OPTIONAL_COMPONENTS WebKitWidgets QUIET)
find_package(KF5 5.23.0 OPTIONAL_COMPONENTS XmlGui QUIET)
@@ -85,8 +90,11 @@ else()
endif()
find_package(KF5 REQUIRED COMPONENTS Archive Bookmarks CoreAddons Config ConfigWidgets
DBusAddons KIO WidgetsAddons NotifyConfig NewStuff XmlGui Notifications GuiAddons TextWidgets IconThemes Crash
OPTIONAL_COMPONENTS DocTools FileMetaData)
DBusAddons KIO WidgetsAddons NotifyConfig NewStuff XmlGui Notifications GuiAddons TextWidgets IconThemes
OPTIONAL_COMPONENTS DocTools FileMetaData Crash Purpose)
if(WIN32)
find_package(DrMinGW)
endif(WIN32)
if (KF5FileMetaData_FOUND)
message(STATUS "Found KF5 FileMetadata to extract file metadata")
@@ -95,6 +103,13 @@ else()
message(STATUS "KF5 FileMetadata not found, file metadata will not be available")
endif()
if (KF5Purpose_FOUND)
message(STATUS "Found KF5 Purpose, filesharing enabled")
set(KF5_PURPOSE TRUE)
else()
message(STATUS "KF5 Purpose not found, filesharing disabled")
endif()
# Search MLT package.
find_package(MLT ${MLT_MIN_VERSION} REQUIRED)
set_package_properties(MLT PROPERTIES
@@ -103,20 +118,29 @@ set_package_properties(MLT PROPERTIES
TYPE RUNTIME
PURPOSE "Required to do video processing")
set(MLT_PREFIX ${MLT_ROOT_DIR})
if(NOT WIN32)
set(MLT_PREFIX ${MLT_ROOT_DIR})
else()
set(MLT_PREFIX "..")
endif()
add_subdirectory(data)
if(KF5DocTools_FOUND)
add_subdirectory(doc)
endif()
#add_subdirectory(plugins)
ecm_optional_add_subdirectory(po)
add_subdirectory(renderer)
add_subdirectory(src)
add_subdirectory(thumbnailer)
#add_subdirectory(testingArea)
ki18n_install(po)
if (KF5DocTools_FOUND)
kdoctools_install(po)
endif()
install( FILES kdenlive.categories DESTINATION ${KDE_INSTALL_CONFDIR} )
include(GNUInstallDirs)
install( FILES AUTHORS COPYING README DESTINATION ${CMAKE_INSTALL_DOCDIR})
configure_file(config-kdenlive.h.cmake config-kdenlive.h @ONLY)
feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)

35
README
View File

@@ -1,36 +1,14 @@
About Kdenlive
==============
# About Kdenlive
Kdenlive is a video editing application,
based on MLT Framework and KDE Frameworks 5
Kdenlive (https://kdenlive.org) is a Free and Open Source video editing application, based on MLT Framework and KDE Frameworks 5. It is distributed under the GNU General Public Licence Version 2.
Please check the project page for more information:
https://kdenlive.org
# Builing from source
Building from source
====================
Instructions to build Kdenlive are available on the KDE wiki : https://community.kde.org/Kdenlive/Development
You will first need to install development headers dependencies
from your system (mainly KDE and MLT).
# Contributing to Kdenlive
Then in the directory where you extracted the source archive
(with custom /install/path):
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/install/path
make -j4
sudo make install
and then run
/install/path/bin/kdenlive
Alternately, to get kdenlive with an up-to-date multimedia stack
(isolated from your system), you can use the build-kdenlive.sh from:
https://github.com/mltframework/mlt-scripts/
Contributing
============
Please note that Kdenlive's Github repo is just a mirror: see https://community.kde.org/Infrastructure/Github_Mirror for detailed explanations on how to submit patches.
We welcome all feedback and offers for help!
@@ -49,4 +27,3 @@ We welcome all feedback and offers for help!
we don't test every (any?) other video editor, so give precise explanations
* Code! Help fixing bugs, improving usability, optimizing, porting...
register on KDE infrastructure, study its guidelines, and pick from roadmap:
http://community.kde.org/Kdenlive/Roadmap

View File

@@ -0,0 +1,25 @@
# cmake macro to find DrMinGW Windows crash handler
#
# copyright (c) 2018, Vincent Pinon <vpinon@kde.org>
#
# once done this will define:
#
# DRMINGW_FOUND - system has DrMinGW
# DRMINGW_INCLUDE_DIR - the DrMinGW include directory
# DRMINGW_LIBRARY - the libraries needed to use DrMinGW
#
# redistribution and use is allowed according to the terms of the bsd license.
if (DRMINGW_INCLUDE_DIR AND DRMINGW_LIBRARY)
# already in cache, be silent
set (DRMINGW_FIND_QUIETLY true)
endif (DRMINGW_INCLUDE_DIR AND DRMINGW_LIBRARY)
find_path (DRMINGW_INCLUDE_DIR exchndl.h)
find_library (DRMINGW_LIBRARY exchndl)
include (FindPackageHandleStandardArgs)
find_package_handle_standard_args (DrMinGW DEFAULT_MSG DRMINGW_INCLUDE_DIR DRMINGW_LIBRARY)
mark_as_advanced(DRMINGW_INCLUDE_DIR DRMINGW_LIBRARY)

View File

@@ -6,7 +6,7 @@
# Redistribution and use is allowed according to the terms of the BSD license.
find_package(PkgConfig QUIET)
pkg_check_modules(PC_MLT QUIET mlt++)
pkg_check_modules(PC_MLT mlt++)
find_path(MLT_INCLUDE_DIR
NAMES framework/mlt.h

View File

@@ -1,50 +0,0 @@
# Find QJSON - JSON handling library for Qt
#
# This module defines
# QJSON_FOUND - whether the qsjon library was found
# QJSON_LIBRARIES - the qjson library
# QJSON_INCLUDE_DIR - the include path of the qjson library
#
# Copyright (c) 2010 Pino Toscano, <toscano.pino@tiscali.it>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
if (QJSON_INCLUDE_DIR AND QJSON_LIBRARIES)
# Already in cache
set (QJSON_FOUND TRUE)
else (QJSON_INCLUDE_DIR AND QJSON_LIBRARIES)
if (NOT WIN32)
# use pkg-config to get the values of QJSON_INCLUDE_DIRS
# and QJSON_LIBRARY_DIRS to add as hints to the find commands.
include (FindPkgConfig)
pkg_check_modules (PC_QJSON REQUIRED QJson>=0.5)
endif (NOT WIN32)
find_library (QJSON_LIBRARIES
NAMES
qjson
PATHS
${PC_QJSON_LIBRARY_DIRS}
${LIB_INSTALL_DIR}
${KDE4_LIB_DIR}
)
find_path (QJSON_INCLUDE_DIR
NAMES
qjson/parser.h
PATHS
${PC_QJSON_INCLUDE_DIRS}
${INCLUDE_INSTALL_DIR}
${KDE4_INCLUDE_DIR}
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(QJSON DEFAULT_MSG QJSON_LIBRARIES QJSON_INCLUDE_DIR)
endif (QJSON_INCLUDE_DIR AND QJSON_LIBRARIES)

View File

@@ -26,20 +26,15 @@ install(FILES
timeline_vthumbs.png
kdenliveeffectscategory.rc
kdenlivetranscodingrc
# Qml are now embeded as Qt resources from /src/uiresources.qrc
# kdenlivemonitor.qml
# kdenliveclipmonitor.qml
# kdenlivemonitoreffectscene.qml
# kdenlivemonitorcornerscene.qml
# kdenlivemonitorsplit.qml
DESTINATION ${DATA_INSTALL_DIR}/kdenlive)
install(FILES kdenlive.notifyrc DESTINATION ${KNOTIFYRC_INSTALL_DIR})
install(FILES kdenlive_projectprofiles.knsrc kdenlive_renderprofiles.knsrc kdenlive_wipes.knsrc kdenlive_titles.knsrc DESTINATION ${CONFIG_INSTALL_DIR})
install(FILES kdenlive_renderprofiles.knsrc kdenlive_wipes.knsrc kdenlive_titles.knsrc DESTINATION ${CONFIG_INSTALL_DIR})
install(FILES profiles.xml DESTINATION ${DATA_INSTALL_DIR}/kdenlive/export)
install(FILES org.kde.kdenlive.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR})
install(FILES org.kde.kdenlive.desktop DESTINATION ${XDG_APPS_INSTALL_DIR})
find_package(SharedMimeInfo REQUIRED)
install(FILES kdenlive.xml westley.xml DESTINATION ${XDG_MIME_INSTALL_DIR})
install(FILES org.kde.kdenlive.xml westley.xml DESTINATION ${XDG_MIME_INSTALL_DIR})
update_xdg_mimetypes(${XDG_MIME_INSTALL_DIR})

View File

@@ -1,12 +1,12 @@
function get_files
{
echo kdenlive.xml
echo org.kde.kdenlive.xml
}
function po_for_file
{
case "$1" in
kdenlive.xml)
org.kde.kdenlive.xml)
echo kdenlive_xml_mimetypes.po
;;
esac
@@ -15,7 +15,7 @@ function po_for_file
function tags_for_file
{
case "$1" in
kdenlive.xml)
org.kde.kdenlive.xml)
echo comment
;;
esac

View File

@@ -99,7 +99,7 @@ The rest:
- works with MLT filters that use mlt_geometry for keyframe support (includes all frei0r filters)
- same attributes as "keyframe"
- "geometry":
- a rectangle: postion + dimension + additional value
- a rectangle: position + dimension + additional value
- works with MLT filters using mlt_geometry
- the rect can be edited on the project monitor
- additional attributes:
@@ -110,7 +110,7 @@ The rest:
- url/path
- represented by button to open "file open" dialog
- additional attributes:
- "filter": Filter for file extensions. Example : "*.cpp *.cc *.C|C++ Source Files\n*.h *.H|Header files" or as using mimetype: "image/png text/html"
- "filter": Filter for file extensions. Example : "*.cpp *.cc *.C|C++ Source Files\n*.h *.H|Header files" or as using MIME type: "image/png text/html"
- "wipe":
- special GUI for the wipe transition makes it possible to select a direction of a slide
- "addedgeometry":

View File

@@ -1,117 +1,117 @@
<!DOCTYPE kpartgui>
<group>
<effect tag="frei0r.curves" id="frei0r.curves">
<name>Curves</name>
<description>Color curves adjustment</description>
<author>Maksim Golovkin</author>
<parameter type="list" name="Channel" default="0" paramlist="0;1;2;3">
<paramlistdisplay>Red,Green,Blue,Luma</paramlistdisplay>
<name>Channel</name>
</parameter>
<parameter type="list" name="Luma formula" default="1" paramlist="0;1">
<paramlistdisplay>Rec. 601,Rec. 709</paramlistdisplay>
<name>Luma formula</name>
</parameter>
<effect tag="frei0r.curves" id="frei0r.curves">
<name>Curves</name>
<description>Color curves adjustment</description>
<author>Maksim Golovkin</author>
<parameter type="list" name="Channel" default="0" paramlist="0;1;2;3">
<paramlistdisplay>Red,Green,Blue,Luma</paramlistdisplay>
<name>Channel</name>
</parameter>
<parameter type="list" name="Luma formula" default="1" paramlist="0;1">
<paramlistdisplay>Rec. 601,Rec. 709</paramlistdisplay>
<name>Luma formula</name>
</parameter>
<!-- No actual parameter: Represents the curve widget -->
<parameter type="curve" default="0" depends="Channel" number="Curve point number" inpoints="Point %i input value" outpoints="Point %i output value" min="1" max="5" />
<!-- No actual parameter: Represents the curve widget -->
<parameter type="curve" default="0" depends="Channel" number="Curve point number" inpoints="Point %i input value" outpoints="Point %i output value" min="1" max="5" />
<parameter type="fixed" name="Curve point number" default="2" min="2" max="5">
<name>Number of curve points</name>
</parameter>
<parameter type="fixed" name="Point 1 input value" default="0" min="0" max="1">
<name>Point 1 input value</name>
</parameter>
<parameter type="fixed" name="Point 1 output value" default="0" min="0" max="1">
<name>Point 1 output value</name>
</parameter>
<parameter type="fixed" name="Point 2 input value" default="1" min="0" max="1">
<name>Point 2 input value</name>
</parameter>
<parameter type="fixed" name="Point 2 output value" default="1" min="0" max="1">
<name>Point 2 output value</name>
</parameter>
<parameter type="fixed" name="Point 3 input value" default="0" min="0" max="1">
<name>Point 3 input value</name>
</parameter>
<parameter type="fixed" name="Point 3 output value" default="0" min="0" max="1">
<name>Point 3 output value</name>
</parameter>
<parameter type="fixed" name="Point 4 input value" default="0" min="0" max="1">
<name>Point 4 input value</name>
</parameter>
<parameter type="fixed" name="Point 4 output value" default="0" min="0" max="1">
<name>Point 4 output value</name>
</parameter>
<parameter type="fixed" name="Point 5 input value" default="0" min="0" max="1">
<name>Point 5 input value</name>
</parameter>
<parameter type="fixed" name="Point 5 output value" default="0" min="0" max="1">
<name>Point 5 output value</name>
</parameter>
<parameter type="bool" name="Show curves" default="0">
<name>Show graph in picture</name>
</parameter>
<parameter type="list" name="Graph position" default="3" paramlist="0;1;2;3">
<paramlistdisplay>Top Left,Top Right,Bottom Left,Bottom Right</paramlistdisplay>
<name>Graph position</name>
</parameter>
</effect>
<effect LC_NUMERIC="C" tag="frei0r.curves" id="frei0r.curves" version="0.3">
<name>Curves</name>
<description>Color curves adjustment</description>
<author>Maksim Golovkin</author>
<parameter type="list" name="Channel" default="0" paramlist="0;1;2;3">
<paramlistdisplay>Red,Green,Blue,Luma</paramlistdisplay>
<name>Channel</name>
</parameter>
<parameter type="list" name="Luma formula" default="1" paramlist="0;1">
<paramlistdisplay>Rec. 601,Rec. 709</paramlistdisplay>
<name>Luma formula</name>
</parameter>
<!-- No actual parameter: Represents the curve widget -->
<parameter type="curve" default="0" depends="Channel" number="Curve point number" inpoints="Point %i input value" outpoints="Point %i output value" min="1" max="5" />
<parameter type="fixed" name="Curve point number" default="2" min="2" max="5">
<name>Number of curve points</name>
</parameter>
<parameter type="fixed" name="Point 1 input value" default="0" min="0" max="1">
<name>Point 1 input value</name>
</parameter>
<parameter type="fixed" name="Point 1 output value" default="0" min="0" max="1">
<name>Point 1 output value</name>
</parameter>
<parameter type="fixed" name="Point 2 input value" default="1" min="0" max="1">
<name>Point 2 input value</name>
</parameter>
<parameter type="fixed" name="Point 2 output value" default="1" min="0" max="1">
<name>Point 2 output value</name>
</parameter>
<parameter type="fixed" name="Point 3 input value" default="0" min="0" max="1">
<name>Point 3 input value</name>
</parameter>
<parameter type="fixed" name="Point 3 output value" default="0" min="0" max="1">
<name>Point 3 output value</name>
</parameter>
<parameter type="fixed" name="Point 4 input value" default="0" min="0" max="1">
<name>Point 4 input value</name>
</parameter>
<parameter type="fixed" name="Point 4 output value" default="0" min="0" max="1">
<name>Point 4 output value</name>
</parameter>
<parameter type="fixed" name="Point 5 input value" default="0" min="0" max="1">
<name>Point 5 input value</name>
</parameter>
<parameter type="fixed" name="Point 5 output value" default="0" min="0" max="1">
<name>Point 5 output value</name>
</parameter>
<parameter type="bool" name="Show curves" default="0">
<name>Show graph in picture</name>
</parameter>
<parameter type="list" name="Graph position" default="3" paramlist="0;1;2;3">
<paramlistdisplay>Top Left,Top Right,Bottom Left,Bottom Right</paramlistdisplay>
<name>Graph position</name>
</parameter>
</effect>
<effect LC_NUMERIC="C" tag="frei0r.curves" id="frei0r.curves" version="0.3">
<name>Curves</name>
<description>Color curves adjustment</description>
<author>Maksim Golovkin</author>
<parameter type="list" name="Channel" default="0.5" paramlist="0.5;0;0.1;0.2;0.3;0.4;0.6;0.71">
<paramlistdisplay>RGB,Red,Green,Blue,Alpha,Luma,Hue,Saturation</paramlistdisplay>
<name>Channel</name>
</parameter>
<parameter type="list" name="Luma formula" default="1" paramlist="0;1">
<paramlistdisplay>Rec. 601,Rec. 709</paramlistdisplay>
<name>Luma formula</name>
</parameter>
<!-- No actual parameter: Represents the curve widget -->
<parameter type="curve" default="0" depends="Channel" number="Curve point number" inpoints="Point %i input value" outpoints="Point %i output value" min="1" max="5" />
<parameter type="fixed" name="Curve point number" default="0.2" min="0.2" max="0.5">
<name>Number of curve points</name>
</parameter>
<parameter type="fixed" name="Point 1 input value" default="0" min="0" max="1">
<name>Point 1 input value</name>
</parameter>
<parameter type="fixed" name="Point 1 output value" default="0" min="0" max="1">
<name>Point 1 output value</name>
</parameter>
<parameter type="fixed" name="Point 2 input value" default="1" min="0" max="1">
<name>Point 2 input value</name>
</parameter>
<parameter type="fixed" name="Point 2 output value" default="1" min="0" max="1">
<name>Point 2 output value</name>
</parameter>
<parameter type="fixed" name="Point 3 input value" default="0" min="0" max="1">
<name>Point 3 input value</name>
</parameter>
<parameter type="fixed" name="Point 3 output value" default="0" min="0" max="1">
<name>Point 3 output value</name>
</parameter>
<parameter type="fixed" name="Point 4 input value" default="0" min="0" max="1">
<name>Point 4 input value</name>
</parameter>
<parameter type="fixed" name="Point 4 output value" default="0" min="0" max="1">
<name>Point 4 output value</name>
</parameter>
<parameter type="fixed" name="Point 5 input value" default="0" min="0" max="1">
<name>Point 5 input value</name>
</parameter>
<parameter type="fixed" name="Point 5 output value" default="0" min="0" max="1">
<name>Point 5 output value</name>
</parameter>
<parameter type="bool" name="Show curves" default="0">
<name>Show graph in picture</name>
</parameter>
<parameter type="list" name="Graph position" default="0.3" paramlist="0;0.1;0.2;0.3">
<paramlistdisplay>Top Left,Top Right,Bottom Left,Bottom Right</paramlistdisplay>
<name>Graph position</name>
</parameter>
</effect>
<parameter type="fixed" name="Curve point number" default="0.2" min="0.2" max="0.5">
<name>Number of curve points</name>
</parameter>
<parameter type="fixed" name="Point 1 input value" default="0" min="0" max="1">
<name>Point 1 input value</name>
</parameter>
<parameter type="fixed" name="Point 1 output value" default="0" min="0" max="1">
<name>Point 1 output value</name>
</parameter>
<parameter type="fixed" name="Point 2 input value" default="1" min="0" max="1">
<name>Point 2 input value</name>
</parameter>
<parameter type="fixed" name="Point 2 output value" default="1" min="0" max="1">
<name>Point 2 output value</name>
</parameter>
<parameter type="fixed" name="Point 3 input value" default="0" min="0" max="1">
<name>Point 3 input value</name>
</parameter>
<parameter type="fixed" name="Point 3 output value" default="0" min="0" max="1">
<name>Point 3 output value</name>
</parameter>
<parameter type="fixed" name="Point 4 input value" default="0" min="0" max="1">
<name>Point 4 input value</name>
</parameter>
<parameter type="fixed" name="Point 4 output value" default="0" min="0" max="1">
<name>Point 4 output value</name>
</parameter>
<parameter type="fixed" name="Point 5 input value" default="0" min="0" max="1">
<name>Point 5 input value</name>
</parameter>
<parameter type="fixed" name="Point 5 output value" default="0" min="0" max="1">
<name>Point 5 output value</name>
</parameter>
<parameter type="bool" name="Show curves" default="0">
<name>Show graph in picture</name>
</parameter>
<parameter type="list" name="Graph position" default="0.3" paramlist="0;0.1;0.2;0.3">
<paramlistdisplay>Top Left,Top Right,Bottom Left,Bottom Right</paramlistdisplay>
<name>Graph position</name>
</parameter>
</effect>
</group>

View File

@@ -1,4 +1,5 @@
<!DOCTYPE kpartgui>
<group>
<effect tag="qtblend" id="qtblend">
<name>Transform</name>
<description>Position, scale and opacity.</description>
@@ -17,5 +18,27 @@
<name>Distort</name>
</parameter>
</effect>
<effect tag="qtblend" id="qtblend" version="2">
<name>Transform</name>
<description>Position, scale and opacity.</description>
<author>Jean-Baptiste Mardelle</author>
<parameter type="animatedrect" name="rect" default="0 0 %width %height 1">
<name>Rectangle</name>
</parameter>
<parameter type="animated" name="rotation" max="360" min="-360" default="0" notintimeline="1">
<name>Rotation</name>
</parameter>
<parameter type="list" name="compositing" default="0" paramlist="0;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;6;8">
<paramlistdisplay>Alpha blend,Xor,Plus,Multiply,Screen,Overlay,Darken,Lighten,Color dodge,Color burn,Hard light,Soft light,Difference,Exclusion,Bitwise or,Bitwise and,Bitwise xor,Bitwise nor,Bitwise nand,Bitwise not xor,Destination in,Destination out</paramlistdisplay>
<name>Compositing</name>
</parameter>
<parameter type="bool" name="distort" default="0" min="0" max="1">
<name>Distort</name>
</parameter>
<parameter type="bool" name="rotate_center" default="1" min="0" max="1">
<name>Rotate from center</name>
</parameter>
</effect>
</group>

View File

@@ -4,8 +4,9 @@ DNxHD=vcodec=dnxhd vb=145000k acodec=pcm_s16le threads=%threads;mov
MPEG=qscale=4 ab=192k vcodec=mpeg2video acodec=mp2 threads=%threads;mpg
[proxy]
x264=-vf scale=640:-1 -g 5 -crf 25 -ab 128k -vcodec libx264 -acodec libvorbis -preset veryfast;mov
MPEG=-vf scale=640:-1 -g 5 -qscale 6 -ab 128k -vcodec mpeg2video -acodec mp2;mpg
x264=-vf scale=960:-2 -g 1 -bf 0 -vb 0 -crf 20 -vcodec libx264 -ab 128k -acodec aac -preset veryfast;mov
MPEG2=-vf scale=960:-2 -g 1 -bf 0 -vb 0 -qscale 6 -ab 128k -vcodec mpeg2video -acodec ac3;mpg
MJPEG=-vf yadif,scale=960:-2 -qscale 3 -vcodec mjpeg -acodec pcm_s16le;mkv
[screengrab]
X264 mute=-crf 25 -vcodec libx264 -preset veryfast -threads 0;mov

View File

@@ -1,7 +1,7 @@
[Global]
IconName=kdenlive
Comment=Kdenlive
Comment[ast]=Kdenlive
Comment[ar]=كدينلايڤ
Comment[bs]=Kdenlive
Comment[ca]=Kdenlive
Comment[ca@valencia]=Kdenlive
@@ -12,6 +12,7 @@ Comment[el]=Kdenlive
Comment[en_GB]=Kdenlive
Comment[es]=Kdenlive
Comment[et]=Kdenlive
Comment[eu]=Kdenlive
Comment[fi]=Kdenlive
Comment[fr]=Kdenlive
Comment[ga]=Kdenlive
@@ -20,6 +21,7 @@ Comment[hu]=Kdenlive
Comment[it]=Kdenlive
Comment[ja]=Kdenlive
Comment[km]=Kdenlive
Comment[ko]=Kdenlive
Comment[lt]=Kdenlive
Comment[lv]=Kdenlive
Comment[mr]=के-डि-एनलाइव्ह
@@ -45,7 +47,6 @@ Comment[zh_TW]=Kdenlive
[Event/RenderFinished]
Name=Rendering finished
Name[ar]=انتهى التّصيير
Name[ast]=Finó'l renderizáu
Name[bs]=Iscrtavanje završeno
Name[ca]=Ha acabat la renderització
Name[ca@valencia]=Ha acabat la renderització
@@ -56,13 +57,15 @@ Name[el]=Η αποτύπωση ολοκληρώθηκε
Name[en_GB]=Rendering finished
Name[es]=Procesamiento finalizado
Name[et]=Renderdamine on valmis
Name[eu]=Errendatzea amaitu da
Name[fi]=Renderöinti valmistui
Name[fr]=Rendu terminé
Name[gl]=Renderizado finalizado
Name[gl]=Rematou a renderización
Name[hu]=A renderelés befejeződött
Name[it]=Esportazione terminata
Name[ja]=レンダリングが完了しました
Name[km]=បាន​បញ្ចប់​ការ​បង្ហាញ
Name[ko]=렌더링 완료됨
Name[lt]=Atvaizdavimas baigtas
Name[lv]=Renderēšana pabeigta
Name[mr]=रेंडरींग पूर्ण झाले
@@ -73,6 +76,7 @@ Name[pl]=Ukończono renderowanie
Name[pt]=A geração terminou
Name[pt_BR]=A renderização terminou
Name[ro]=Randare încheiată
Name[ru]=Рендеринг завершён
Name[sk]=Renderovanie ukončené
Name[sl]=Izrisovanje končano
Name[sv]=Återgivning klar
@@ -83,34 +87,36 @@ Name[zh_CN]=渲染结束
Name[zh_TW]=已完成導出
Comment=Rendering is over
Comment[ar]=قد انتهى التّصيير
Comment[ast]=Acabóse'l renderizáu
Comment[bs]=Iscrtavanje je gotovo
Comment[ca]=La renderització ja ha acabat
Comment[ca@valencia]=La renderització ja ha acabat
Comment[cs]=Renderování je hotové
Comment[cs]=Renderování je u konce
Comment[da]=Renderingen er slut
Comment[de]=Das Rendern ist beendet
Comment[el]=Η αποτύπωση τελείωσε
Comment[en_GB]=Rendering is over
Comment[es]=El procesamiento ha finalizado
Comment[et]=Renderdamine on valmis
Comment[eu]=Errendatzea bukatu da
Comment[fi]=Renderöinti on tehty
Comment[fr]=Le rendu est terminé
Comment[gl]=Rematou o renderizado
Comment[gl]=Rematou a renderización
Comment[hu]=A renderelésnek vége
Comment[it]=L'esportazione è terminata
Comment[ja]=レンダリングが終了しました
Comment[km]=ការ​បង្ហាញ​បាន​ចប់
Comment[ko]=렌더링이 끝났음
Comment[lt]=Atvaizdavimas baigtas
Comment[lv]=Renderēšana ir beigusies
Comment[mr]=रेंडरींग पूर्ण झाले आहे
Comment[nb]=Ferdig med opptegning
Comment[nl]=Weergave uitwerken is gereed
Comment[nn]=Videorendering er ferdig
Comment[pl]=Ukończono zostało zakończone
Comment[pl]=Renderowanie zostało zakończone
Comment[pt]=A geração terminou
Comment[pt_BR]=A renderização foi terminada
Comment[ro]=Randarea s-a încheiat
Comment[ru]=Рендеринг завершён
Comment[sk]=Renderovanie je skončené
Comment[sl]=Izrisovanje je končano
Comment[sv]=Återgivningen är gjord
@@ -124,7 +130,6 @@ Action=Popup
[Event/RenderStarted]
Name=Rendering started
Name[ar]=بدأ التّصيير
Name[ast]=Entamó'l renderizáu
Name[bs]=Iscrtavanje započelo
Name[ca]=Ha començat la renderització
Name[ca@valencia]=Ha començat la renderització
@@ -135,13 +140,15 @@ Name[el]=Η αποτύπωση ξεκίνησε
Name[en_GB]=Rendering started
Name[es]=Procesamiento inciado
Name[et]=Renderdamist on alustatud
Name[eu]=Errendatzea hasi da
Name[fi]=Renderöinti aloitettu
Name[fr]=Rendu démarré
Name[gl]=Iniciado o renderizado
Name[gl]=Comezou a renderización
Name[hu]=A renderelés elkezdődött
Name[it]=Esportazione avviata
Name[ja]=レンダリングを開始しました
Name[km]=ការ​បង្ហាញ​បាន​ចាប់ផ្ដើម
Name[ko]=렌더링 시작됨
Name[lt]=Atvaizdavimas pradėtas
Name[lv]=Renderēšana sākta
Name[mr]=रेंडरींग सुरु झाले
@@ -152,6 +159,7 @@ Name[pl]=Rozpoczęto renderowanie
Name[pt]=A geração foi iniciada
Name[pt_BR]=A renderização iniciou
Name[ro]=Randarea începută
Name[ru]=Рендеринг запущен
Name[sk]=Renderovanie spustené
Name[sl]=Izrisovanje začeto
Name[sv]=Återgivning startad
@@ -162,24 +170,25 @@ Name[zh_CN]=渲染开始
Name[zh_TW]=導出已開始
Comment=Rendering was started
Comment[ar]=قد بدأ التّصيير
Comment[ast]=Anicióse'l rederizáu
Comment[bs]=Iscrtavanje je započelo
Comment[ca]=La renderització ja ha començat
Comment[ca@valencia]=La renderització ja ha començat
Comment[cs]=Renderování bylo začato
Comment[cs]=Vykreslování bylo zahájeno
Comment[da]=Renderingen blev startet
Comment[de]=Das Rendern wurde gestartet
Comment[el]=Η αποτύπωση ξεκίνησε
Comment[en_GB]=Rendering was started
Comment[es]=El procesamiento ha sido iniciado
Comment[et]=Renderdamist on alustatud
Comment[eu]=Errendatzea abiarazia izan da
Comment[fi]=Renderöinti aloitettiin
Comment[fr]=Le rendu a démarré
Comment[gl]=Vaise iniciar o renderizado
Comment[gl]=Comezou a renderización
Comment[hu]=A renderelés elkezdődött
Comment[it]=L'esportazione è stata avviata
Comment[ja]=レンダリングを開始しました
Comment[km]=ការ​បង្ហាញ​ត្រូវ​បាន​ចាប់ផ្ដើម
Comment[ko]=렌더링이 시작됨
Comment[lt]=Atvaizdavimas buvo pradėtas
Comment[lv]=Renderēšana tika palaista
Comment[mr]=रेंडरींग सुरु झाले होते
@@ -190,6 +199,7 @@ Comment[pl]=Renderowanie zostało rozpoczęte
Comment[pt]=A geração foi iniciada
Comment[pt_BR]=A renderização foi iniciada
Comment[ro]=Randarea a început
Comment[ru]=Рендеринг запущен
Comment[sk]=Renderovanie bolo spustené
Comment[sl]=Izrisovanje se je začelo
Comment[sv]=Återgivningen har startats
@@ -207,12 +217,13 @@ Name[bs]=Kadar uhvaćen
Name[ca]=S'ha capturat un fotograma
Name[ca@valencia]=S'ha capturat un fotograma
Name[cs]=Snímek zachycen
Name[da]=Billed indfanget
Name[da]=Billede indfanget
Name[de]=Bild aufgenommen
Name[el]=Σύλληψη πλαισίου
Name[en_GB]=Frame captured
Name[es]=Fotograma capturado
Name[et]=Kaader on salvestatud
Name[eu]=Bilbe atzematea
Name[fi]=Ruutu kaapattu
Name[fr]=Cadre capturé
Name[gl]=Fotograma capturado
@@ -220,6 +231,7 @@ Name[hu]=Képkocka rögzítve
Name[it]=Fotogramma acquisito
Name[ja]=フレームをキャプチャしました
Name[km]=បាន​ចាប់​យក​ស៊ុម
Name[ko]=프레임 캡처됨
Name[lt]=Kadras išsaugotas
Name[lv]=Kadrs notverts
Name[mr]=फ्रेम पकडली
@@ -230,6 +242,7 @@ Name[pl]=Przechwycono klatkę
Name[pt]=Imagem capturada
Name[pt_BR]=Imagem capturada
Name[ro]=Cadru captat
Name[ru]=Кадр получен
Name[sk]=Snímka zachytená
Name[sl]=Sličica zajeta
Name[sv]=Ram lagrad
@@ -244,12 +257,13 @@ Comment[bs]=Kadar je uhvaćen na disk
Comment[ca]=S'ha capturat i desat un fotograma al disc
Comment[ca@valencia]=S'ha capturat i guardat un fotograma al disc
Comment[cs]=Snímek byl zachycen na disk
Comment[da]=Et billed blev indfanget til disken
Comment[da]=Et billede blev indfanget til disken
Comment[de]=Ein Bild wurde aufgenommen und auf die Festplatte gespeichert
Comment[el]=Έγινε σύλληψη πλαισίου στο δίσκο
Comment[en_GB]=A frame was captured to disk
Comment[es]=Un fotograma fue capturado al disco
Comment[et]=Kaader on kettale salvestatud
Comment[eu]=Bilbe bat atzeman da diskora
Comment[fi]=Ruutu kaapattiin levylle
Comment[fr]=Un cadre a été capturé sur le disque
Comment[gl]=Capturouse un fotograma para o disco
@@ -257,6 +271,7 @@ Comment[hu]=Egy képkocka rögzítésre került a lemezre
Comment[it]=È stato acquisito un fotogramma sul disco
Comment[ja]=フレームをディスクにキャプチャしました
Comment[km]=ស៊ុម​ត្រូវ​បាន​ចាប់​យក​ទៅកាន់​ថាស
Comment[ko]=프레임이 디스크에 캡처됨
Comment[lt]=Kadras buvo išsaugotas į diską
Comment[lv]=Kadrs tika notverts diskā
Comment[mr]=फ्रेम डिस्कवर पकडली
@@ -267,6 +282,7 @@ Comment[pl]=Klatka została przechwycona na dysk
Comment[pt]=Foi capturada uma imagem para o disco
Comment[pt_BR]=Foi capturada uma imagem para o disco
Comment[ro]=Un cadru a fost captat pe disc
Comment[ru]=Выполнен захват кадра с сохранением на диск
Comment[sk]=Snímka bola uložená na disk
Comment[sl]=Sličica je bila zajeta na disk
Comment[sv]=En ram har lagrats på disk
@@ -291,6 +307,7 @@ Name[el]=Έτοιμο για σύλληψη
Name[en_GB]=Ready to capture
Name[es]=Listo para capturar
Name[et]=Salvestamiseks valmis
Name[eu]=Atzemateko prest
Name[fi]=Valmiina kaappaamaan
Name[fr]=Prêt pour la capture
Name[gl]=Listo para a captura
@@ -298,6 +315,7 @@ Name[hu]=Kezdődhet a rögzítés
Name[it]=Pronto per la registrazione
Name[ja]=キャプチャ準備完了
Name[km]=រួចរាល់​ដើម្បី​ចាប់​យក
Name[ko]=캡처 준비
Name[lt]=Pasiruošęs išsaugoti
Name[lv]=Gatavs notveršanai
Name[mr]=पकडण्याकरिता तयार
@@ -308,6 +326,7 @@ Name[pl]=Gotowy do przechwycenia
Name[pt]=Pronto para capturar
Name[pt_BR]=Pronto para capturar
Name[ro]=Gata de captare
Name[ru]=Готов к захвату
Name[sk]=Pripravené na zachytenie
Name[sl]=Pripravljen na zajem
Name[sv]=Klar att lagra
@@ -322,7 +341,6 @@ Action=Sound
[Event/ErrorMessage]
Name=Error
Name[ar]=خطأ
Name[ast]=Fallu
Name[bs]=Greška
Name[ca]=Error
Name[ca@valencia]=Error
@@ -333,6 +351,7 @@ Name[el]=Σφάλμα
Name[en_GB]=Error
Name[es]=Error
Name[et]=Tõrge
Name[eu]=Errorea
Name[fi]=Virhe
Name[fr]=Erreur
Name[ga]=Earráid
@@ -341,6 +360,7 @@ Name[hu]=Hiba
Name[it]=Errore
Name[ja]=エラー
Name[km]=កំហុស
Name[ko]=오류
Name[lt]=Klaida
Name[lv]=Kļūda
Name[mr]=त्रुटी
@@ -363,25 +383,27 @@ Name[x-test]=xxErrorxx
Name[zh_CN]=错误
Name[zh_TW]=錯誤
Comment=An error occurred in Kdenlive
Comment[ast]=Asocedió un fallu en Kdenlive
Comment[ar]=حدث خطأ في «كدينلايڤ»
Comment[bs]=Desila se greška u KDenlive
Comment[ca]=S'ha produït un error al Kdenlive
Comment[ca@valencia]=S'ha produït un error al Kdenlive
Comment[cs]=V Kdenlive došlo k chybě
Comment[da]=En fejl opstod i Kdenlive
Comment[da]=Der opstod en fejl i Kdenlive
Comment[de]=In Kdenlive ist ein Fehler aufgetreten
Comment[el]=Εμφανίστηκε σφάλμα στο Kdenlive
Comment[en_GB]=An error occurred in Kdenlive
Comment[es]=Ha ocurrido un error en Kdenlive
Comment[et]=Kdenlive'is tekkis tõrge
Comment[eu]=Errore bat gertatu da Kdenliven
Comment[fi]=Kdenlivessä ilmeni virhe
Comment[fr]=Une erreur est survenue dans Kdenlive
Comment[ga]=Tharla earráid in Kdenlive
Comment[gl]=Aconteceu un erro en Kdenlive
Comment[gl]=Ocorreu un erro en Kdenlive
Comment[hu]=Hiba történt a Kdenlive-ban
Comment[it]=Si è verificato un errore in Kdenlive
Comment[ja]=Kdenlive 内でエラーが発生
Comment[km]=មាន​កំហុស​បាន​កើតឡើង​នៅ​ក្នុង Kdenlive
Comment[ko]=Kdenlive에서 오류가 발생함
Comment[lt]=Įvyko Kdenlive klaida
Comment[lv]=Programmā Kdenlive radās kļūda
Comment[mr]=के-डि-एनलाइव्ह मध्ये त्रुटी निर्माण झाली

View File

@@ -1,10 +0,0 @@
[KNewStuff2]
ProvidersUrl=https://kdenlive.org/data/mltprofilesources.xml
TargetDir=kdenlive/profiles
Uncompress=archive
[KNewStuff3]
ProvidersUrl=https://kdenlive.org/data/mltprofilesources.xml
TargetDir=kdenlive/profiles
Uncompress=archive

View File

@@ -1,10 +1,35 @@
[KNewStuff2]
ProvidersUrl=https://kdenlive.org/data/rendersources.xml
TargetDir=kdenlive/export
Uncompress=archive
[KNewStuff3]
Name=Kdenlive Render Profiles
Name[ar]=لاحات «كدينلايڤ» للتّصيير
Name[ca]=Perfils de renderització del Kdenlive
Name[ca@valencia]=Perfils de renderització del Kdenlive
Name[cs]=Profily renderování Kdenlive
Name[da]=Kdenlive-renderingsprofiler
Name[de]=Kdenlive-Render-Profile
Name[el]=Προφίλ αποτύπωσης του Kdenlive
Name[en_GB]=Kdenlive Render Profiles
Name[es]=Perfiles de procesamiento de Kdenlive
Name[eu]=Kdenlive errendatze profilak
Name[fi]=Kdenliven hahmonnusprofiilit
Name[fr]=Profils de rendu Kdenlive
Name[gl]=Perfís de renderización de Kdenlive
Name[it]=Profilo di resa di Kdenlive
Name[ko]=Kdenlive 렌더 속성
Name[nl]=Renderprofielen van Kdenlive
Name[nn]=Render-profilar for Kdenlive
Name[pl]=Profile renderowania Kdenlive
Name[pt]=Perfis de Visualização do Kdenlive
Name[pt_BR]=Perfis de visualização do Kdenlive
Name[ru]=Профили рендеринга Kdenlive
Name[sk]=Vykresľovacie profily Kdenline
Name[sl]=Izrisovalni profili za Kdenlive
Name[sv]=Kdenlive-återgivningsprofiler
Name[tr]=Kdenlive İşleme Profilleri
Name[uk]=Профілі обробки Kdenlive
Name[x-test]=xxKdenlive Render Profilesxx
Name[zh_CN]=Kdenlive 渲染配置文件
Name[zh_TW]=Kdenlive 繪製設定檔
ProvidersUrl=http://download.kde.org/ocs/providers.xml
Categories=Kdenlive Profile
Categories=Kdenlive Export Profiles
TargetDir=kdenlive/export
Uncompress=archive

View File

@@ -1,10 +1,35 @@
[KNewStuff2]
ProvidersUrl=https://kdenlive.org/data/titletemplates.xml
TargetDir=kdenlive/titles
Uncompress=archive
[KNewStuff3]
Name=Kdenlive Title Templates
Name[ar]=قوالب «كدينلايڤ» للعناوين
Name[ca]=Plantilles de títol del Kdenlive
Name[ca@valencia]=Plantilles de títol del Kdenlive
Name[cs]=Šablony titulků Kdenlive
Name[da]=Kdenlive-titelskabeloner
Name[de]=Kdenlive-Titelvorlagen
Name[el]=Πρότυπα τίτλων του Kdenlive
Name[en_GB]=Kdenlive Title Templates
Name[es]=Plantillas de título de Kdenlive
Name[eu]=Kdenlive titulu txantiloiak
Name[fi]=Kdenliven otsikkopohjat
Name[fr]=Modèles de titre Kdenlive
Name[gl]=Modelos de título de Kdenlive
Name[it]=Modelli di titolo di Kdenlive
Name[ko]=Kdenlive 타이틀 속성
Name[nl]=Titelsjablonen van Kdenlive
Name[nn]=Tittelmalar for Kdenlive
Name[pl]=Szablony tytułów Kdenlive
Name[pt]=Perfis de Títulos do Kdenlive
Name[pt_BR]=Modelos de títulos do Kdenlive
Name[ru]=Шаблоны титров Kdenlive
Name[sk]=Šablóny dlaždíc Kdenlive
Name[sl]=Predloge naslovov za Kdenlive
Name[sv]=Kdenlive-titelmallar
Name[tr]=Kdenlive Başlık Şablonları
Name[uk]=Шаблони титрів Kdenlive
Name[x-test]=xxKdenlive Title Templatesxx
Name[zh_CN]=Kdenlive 标题模板
Name[zh_TW]=Kdenlive 標題範本
ProvidersUrl=http://download.kde.org/ocs/providers.xml
Categories=Kdenlive Template
Categories=Kdenlive Title Templates
TargetDir=kdenlive/titles
Uncompress=archive

View File

@@ -1,10 +1,35 @@
[KNewStuff2]
ProvidersUrl=http://download.kde.org/khotnewstuff/kdenlive-providers.xml
TargetDir=kdenlive/lumas
Uncompress=archive
[KNewStuff3]
Name=Kdenlive Transition Wipes
Name[ar]=أشرطة «كدينلايڤ» الانتقاليّة
Name[ca]=Cortinetes de transició del Kdenlive
Name[ca@valencia]=Cortinetes de transició del Kdenlive
Name[cs]=Přechod stírání Kdenlive
Name[da]=Kdenlive-overgangswipes
Name[de]=Kdenlive-Übergangs-Wipes
Name[el]=Μετάβαση με σκούπισμα στο Kdenlive
Name[en_GB]=Kdenlive Transition Wipes
Name[es]=Barridos de transición de Kdenlive
Name[eu]=Kdenlive trantsizio gortinak
Name[fi]=Kdenliven siirtymäpyyhkäisyt
Name[fr]=Transitions par balayage de Kdenlive
Name[gl]=Borrados de transición de Kdenlive
Name[it]=Tendine di transizione di Kdenlive
Name[ko]=Kdenlive 트랜지션 전환
Name[nl]=Overgangsvegen van Kdenlive
Name[nn]=Overgangseffektar for Kdenlive
Name[pl]=Przejścia Kdenlive
Name[pt]=Varrimentos de Transição do Kdenlive
Name[pt_BR]=Limpeza de transição do Kdenlive
Name[ru]=Эффекты смены кадров Kdenlive
Name[sk]=Zahladenia prechodov Kdenlive
Name[sl]=Obrisi prehodov za Kdenlive
Name[sv]=Kdenlive-övergångar
Name[tr]=Kdenlive Geçiş Ekranları
Name[uk]=Перехідні витирання Kdenlive
Name[x-test]=xxKdenlive Transition Wipesxx
Name[zh_CN]=Kdenlive 过渡擦除
Name[zh_TW]=Kdenlive 過渡 Wipes
ProvidersUrl=http://download.kde.org/ocs/providers.xml
Categories=Kdenlive FX
TargetDir=kdenlive/lumas
TargetDir=kdenlive/lumas/HD
Uncompress=archive

View File

@@ -30,14 +30,6 @@ Item {
signal editCurrentMarker()
signal toolBarChanged(bool doAccept)
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.MidButton
onClicked: {
root.showToolbar = !root.showToolbar
toolBarChanged(root.showToolbar)
}
}
SceneToolBar {
id: sceneToolBar
anchors {
@@ -56,12 +48,12 @@ Item {
height: root.profile.y * root.scaley
anchors.centerIn: parent
visible: root.showSafezone
property color overlayColor: 'cyan'
Rectangle {
id: safezone
objectName: "safezone"
color: "transparent"
border.color: "cyan"
border.color: frame.overlayColor
width: parent.width * 0.9
height: parent.height * 0.9
anchors.centerIn: parent
@@ -69,11 +61,51 @@ Item {
id: safetext
objectName: "safetext"
color: "transparent"
border.color: "cyan"
border.color: frame.overlayColor
width: frame.width * 0.8
height: frame.height * 0.8
anchors.centerIn: parent
}
Rectangle {
color: frame.overlayColor
width: frame.width / 20
height: 1
anchors.centerIn: parent
}
Rectangle {
color: frame.overlayColor
height: frame.width / 20
width: 1
anchors.centerIn: parent
}
Rectangle {
color: frame.overlayColor
height: frame.height / 11
width: 1
y: 0
x: parent.width / 2
}
Rectangle {
color: frame.overlayColor
height: frame.height / 11
width: 1
y: parent.height -height
x: parent.width / 2
}
Rectangle {
color: frame.overlayColor
width: frame.width / 11
height: 1
y: parent.height / 2
x: 0
}
Rectangle {
color: frame.overlayColor
width: frame.width / 11
height: 1
y: parent.height / 2
x: parent.width -width
}
}
}

View File

@@ -29,14 +29,6 @@ Item {
signal editCurrentMarker()
signal toolBarChanged(bool doAccept)
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.MidButton
onClicked: {
root.showToolbar = !root.showToolbar
toolBarChanged(root.showToolbar)
}
}
SceneToolBar {
id: sceneToolBar
anchors {
@@ -55,11 +47,12 @@ Item {
height: root.profile.y * root.scaley
anchors.centerIn: parent
visible: root.showSafezone
property color overlayColor: 'cyan'
Rectangle {
id: safezone
objectName: "safezone"
color: "transparent"
border.color: "cyan"
border.color: frame.overlayColor
width: parent.width * 0.9
height: parent.height * 0.9
anchors.centerIn: parent
@@ -67,11 +60,51 @@ Item {
id: safetext
objectName: "safetext"
color: "transparent"
border.color: "cyan"
border.color: frame.overlayColor
width: frame.width * 0.8
height: frame.height * 0.8
anchors.centerIn: parent
}
Rectangle {
color: frame.overlayColor
width: frame.width / 20
height: 1
anchors.centerIn: parent
}
Rectangle {
color: frame.overlayColor
height: frame.width / 20
width: 1
anchors.centerIn: parent
}
Rectangle {
color: frame.overlayColor
height: frame.height / 11
width: 1
y: 0
x: parent.width / 2
}
Rectangle {
color: frame.overlayColor
height: frame.height / 11
width: 1
y: parent.height -height
x: parent.width / 2
}
Rectangle {
color: frame.overlayColor
width: frame.width / 11
height: 1
y: parent.height / 2
x: 0
}
Rectangle {
color: frame.overlayColor
width: frame.width / 11
height: 1
y: parent.height / 2
x: parent.width -width
}
}
}

View File

@@ -159,13 +159,6 @@ Item {
root.addKeyframe()
}
onClicked: {
if (mouse.button & Qt.MidButton) {
root.showToolbar = !root.showToolbar
toolBarChanged(root.showToolbar)
}
}
onPositionChanged: {
if (root.iskeyframe == false) return;
if (pressed && root.requestedKeyFrame >= 0) {

View File

@@ -9,6 +9,7 @@ Item {
property string comment
property string framenum
property rect framesize
property rect adjustedFrame
property point profile
property point center
property double zoom
@@ -16,6 +17,7 @@ Item {
property double scaley
property double offsetx : 0
property double offsety : 0
property double lockratio : -1
onScalexChanged: canvas.requestPaint()
onScaleyChanged: canvas.requestPaint()
onOffsetxChanged: canvas.requestPaint()
@@ -154,7 +156,7 @@ Item {
property bool isMoving : false
anchors.centerIn: root
hoverEnabled: true
acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MidButton
acceptedButtons: Qt.LeftButton | Qt.RightButton
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
readonly property bool containsMouse: {
@@ -174,7 +176,11 @@ Item {
}
onPositionChanged: {
if (pressed && root.requestedKeyFrame != -1) {
if (!pressed) {
mouse.accepted = false
return
}
if (root.requestedKeyFrame != -1) {
isMoving = true
root.centerPoints[root.requestedKeyFrame].x = (mouseX - frame.x) / root.scalex;
root.centerPoints[root.requestedKeyFrame].y = (mouseY - frame.y) / root.scaley;
@@ -183,11 +189,8 @@ Item {
}
}
onClicked: {
if (mouse.button & Qt.MidButton) {
root.showToolbar = !root.showToolbar
toolBarChanged(root.showToolbar)
} else {
onPressed: {
if (mouse.button & Qt.LeftButton) {
if (root.requestedKeyFrame >= 0 && !isMoving) {
root.seekToKeyframe();
}
@@ -223,7 +226,7 @@ Item {
color: "transparent"
border.color: "#ffff0000"
Rectangle {
id: "tlhandle"
id: tlhandle
anchors {
top: parent.top
left: parent.left
@@ -239,24 +242,45 @@ Item {
anchors.centerIn: parent
hoverEnabled: true
cursorShape: Qt.SizeFDiagCursor
onEntered: { tlhandle.color = '#ffff00'}
onExited: { tlhandle.color = '#ff0000'}
onEntered: {
if (!pressed) {
tlhandle.color = '#ffff00'
}
}
onExited: {
if (!pressed) {
tlhandle.color = '#ff0000'
}
}
onPressed: {
oldMouseX = mouseX
oldMouseY = mouseY
effectsize.visible = true
tlhandle.color = '#ffff00'
}
onPositionChanged: {
if (pressed) {
framesize.x = (framerect.x + (mouseX - oldMouseX) - frame.x) / root.scalex;
framesize.width = (framerect.width - (mouseX - oldMouseX)) / root.scalex;
framesize.y = (framerect.y + (mouseY - oldMouseY) - frame.y) / root.scaley;
framesize.height = (framerect.height - (mouseY - oldMouseY)) / root.scaley;
if (root.lockratio > 0) {
var delta = Math.max(mouseX - oldMouseX, mouseY - oldMouseY)
var newwidth = framerect.width - delta
adjustedFrame = framesize
adjustedFrame.width = Math.round(newwidth / root.scalex);
adjustedFrame.height = Math.round(adjustedFrame.width / root.lockratio)
adjustedFrame.y = (framerect.y - frame.y) / root.scaley + framesize.height - adjustedFrame.height;
adjustedFrame.x = (framerect.x - frame.x) / root.scalex + framesize.width - adjustedFrame.width;
framesize = adjustedFrame
} else {
framesize.x = (framerect.x + (mouseX - oldMouseX) - frame.x) / root.scalex;
framesize.width = (framerect.width - (mouseX - oldMouseX)) / root.scalex;
framesize.y = (framerect.y + (mouseY - oldMouseY) - frame.y) / root.scaley;
framesize.height = (framerect.height - (mouseY - oldMouseY)) / root.scaley;
}
root.effectChanged()
}
}
onReleased: {
effectsize.visible = false
tlhandle.color = '#ff0000'
}
}
Text {
@@ -272,7 +296,7 @@ Item {
}
}
Rectangle {
id: "trhandle"
id: trhandle
anchors {
top: parent.top
right: parent.right
@@ -288,28 +312,48 @@ Item {
anchors.centerIn: parent
hoverEnabled: true
cursorShape: Qt.SizeBDiagCursor
onEntered: { trhandle.color = '#ffff00'}
onExited: { trhandle.color = '#ff0000'}
onEntered: {
if (!pressed) {
trhandle.color = '#ffff00'
}
}
onExited: {
if (!pressed) {
trhandle.color = '#ff0000'
}
}
onPressed: {
oldMouseX = mouseX
oldMouseY = mouseY
effectsize.visible = true
trhandle.color = '#ffff00'
}
onPositionChanged: {
if (pressed) {
framesize.width = (framerect.width + (mouseX - oldMouseX)) / root.scalex;
framesize.y = (framerect.y + (mouseY - oldMouseY) - frame.y) / root.scaley;
framesize.height = (framerect.height - (mouseY - oldMouseY)) / root.scaley;
if (root.lockratio > 0) {
var delta = Math.max(oldMouseX - mouseX, mouseY - oldMouseY)
var newwidth = framerect.width - delta
adjustedFrame = framesize
adjustedFrame.width = Math.round(newwidth / root.scalex);
adjustedFrame.height = Math.round(adjustedFrame.width / root.lockratio)
adjustedFrame.y = (framerect.y - frame.y) / root.scaley + framesize.height - adjustedFrame.height;
framesize = adjustedFrame
} else {
framesize.width = (framerect.width + (mouseX - oldMouseX)) / root.scalex;
framesize.y = (framerect.y + (mouseY - oldMouseY) - frame.y) / root.scaley;
framesize.height = (framerect.height - (mouseY - oldMouseY)) / root.scaley;
}
root.effectChanged()
}
}
onReleased: {
effectsize.visible = false
trhandle.color = '#ff0000'
}
}
}
Rectangle {
id: "blhandle"
id: blhandle
anchors {
bottom: parent.bottom
left: parent.left
@@ -325,28 +369,46 @@ Item {
anchors.centerIn: parent
hoverEnabled: true
cursorShape: Qt.SizeBDiagCursor
onEntered: { blhandle.color = '#ffff00'}
onExited: { blhandle.color = '#ff0000'}
onEntered: {
if (!pressed) {
blhandle.color = '#ffff00'
}
}
onExited: {
if (!pressed) {
blhandle.color = '#ff0000'
}
}
onPressed: {
oldMouseX = mouseX
oldMouseY = mouseY
effectsize.visible = true
blhandle.color = '#ffff00'
}
onPositionChanged: {
if (pressed) {
framesize.x = (framerect.x + (mouseX - oldMouseX) - frame.x) / root.scalex;
framesize.width = (framerect.width - (mouseX - oldMouseX)) / root.scalex;
framesize.height = (framerect.height + (mouseY - oldMouseY)) / root.scaley;
if (root.lockratio > 0) {
var delta = Math.max(mouseX - oldMouseX, oldMouseY - mouseY)
var newwidth = framerect.width - delta
framesize.x = (framerect.x + (framerect.width - newwidth) - frame.x) / root.scalex;
framesize.width = Math.round(newwidth / root.scalex);
framesize.height = Math.round(framesize.width / root.lockratio)
} else {
framesize.x = (framerect.x + (mouseX - oldMouseX) - frame.x) / root.scalex;
framesize.width = (framerect.width - (mouseX - oldMouseX)) / root.scalex;
framesize.height = (framerect.height + (mouseY - oldMouseY)) / root.scaley;
}
root.effectChanged()
}
}
onReleased: {
effectsize.visible = false
blhandle.color = '#ff0000'
}
}
}
Rectangle {
id: "brhandle"
id: brhandle
anchors {
bottom: parent.bottom
right: parent.right
@@ -362,22 +424,39 @@ Item {
anchors.centerIn: parent
hoverEnabled: true
cursorShape: Qt.SizeFDiagCursor
onEntered: { brhandle.color = '#ffff00'}
onExited: { brhandle.color = '#ff0000'}
onEntered: {
if (!pressed) {
brhandle.color = '#ffff00'
}
}
onExited: {
if (!pressed) {
brhandle.color = '#ff0000'
}
}
onPressed: {
oldMouseX = mouseX
oldMouseY = mouseY
effectsize.visible = true
brhandle.color = '#ffff00'
}
onPositionChanged: {
if (pressed) {
framesize.width = (framerect.width + (mouseX - oldMouseX)) / root.scalex;
framesize.height = (framerect.height + (mouseY - oldMouseY)) / root.scaley;
if (root.lockratio > 0) {
var delta = Math.max(oldMouseX - mouseX, oldMouseY - mouseY)
var newwidth = framerect.width - delta
framesize.width = Math.round(newwidth / root.scalex);
framesize.height = Math.round(framesize.width / root.lockratio)
} else {
framesize.width = (framerect.width + (mouseX - oldMouseX)) / root.scalex;
framesize.height = (framerect.height + (mouseY - oldMouseY)) / root.scaley;
}
root.effectChanged()
}
}
onReleased: {
effectsize.visible = false
brhandle.color = '#ff0000'
}
}
Text {

View File

@@ -182,10 +182,6 @@ Item {
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
onClicked: {
if (mouse.button & Qt.MidButton) {
root.showToolbar = !root.showToolbar
toolBarChanged(root.showToolbar)
}
if (!root.isDefined) {
if (mouse.button == Qt.RightButton) {
// close shape, define control points

View File

@@ -25,6 +25,7 @@ Item {
anchors.centerIn: parent
hoverEnabled: true
cursorShape: Qt.SizeHorCursor
acceptedButtons: Qt.LeftButton
onPressed: {
root.percentage = mouseX / width
root.splitterPos = mouseX

View File

@@ -1,12 +1,14 @@
.\" This file was generated by kdemangen.pl
.TH KDENLIVE 1 "Nov 2008" "K Desktop Environment" "An open source video editor."
.TH Kdenlive 1 "Aug 2018" "KDE" "An open source video editor."
.SH NAME
kdenlive \- An open source non\-linear video editor.
.SH SYNOPSIS
kdenlive [Qt\-options] [KDE\-options] [options] [file]
.SH DESCRIPTION
Kdenlive is an open source non\-linear video editor which supports a
large number of formats for editing, including DV, AVCHD (experimental support) and HDV. Kdenlive relies on several other open source projects, such as FFmpeg and MLT video framework.
large number of formats for editing.
It relies on several other open source projects,
such as FFmpeg and MLT video framework.
.SH OPTIONS
.SS
.SS Arguments:
@@ -17,6 +19,9 @@ Document to open
.TP
.B \-\-mlt\-path <path>
Set the path for MLT environnement
.TP
.B \-\-mlt\-log <verbose/debug>
Set MLT log level
.SS
.SS Generic options:
.TP
@@ -46,7 +51,7 @@ End of options
.SS
.SS KDE options:
.TP
.B \-\-caption <caption>
.B \-\-qwindowtitle <caption>
Use 'caption' as name in the titlebar
.TP
.B \-\-icon <icon>
@@ -148,11 +153,9 @@ the result of calling melt, ffmpeg, etc. This can be used for debugging.
.SH SEE ALSO
.BR kdenlive_render (1).
Please see the homepage at
.BR http://www.kdenlive.org/
.BR https://www.kdenlive.org/
.br
.SH AUTHORS
.nf
Jean\-Baptiste Mardelle <jb@kdenlive.org>
.br
Marco Gittler <g.marco@freenet.de>
.br

View File

@@ -4,25 +4,29 @@
<metadata_license>CC0-1.0</metadata_license>
<project_license>GPL-2.0+</project_license>
<name>Kdenlive</name>
<name xml:lang="ast">Kdenlive</name>
<name xml:lang="ar">كدينلايڤ</name>
<name xml:lang="bs">Kdenlive</name>
<name xml:lang="ca">Kdenlive</name>
<name xml:lang="ca-valencia">Kdenlive</name>
<name xml:lang="cs">Kdenlive</name>
<name xml:lang="da">Kdenlive</name>
<name xml:lang="de">Kdenlive</name>
<name xml:lang="el">Kdenlive</name>
<name xml:lang="en-GB">Kdenlive</name>
<name xml:lang="es">Kdenlive</name>
<name xml:lang="et">Kdenlive</name>
<name xml:lang="eu">Kdenlive</name>
<name xml:lang="fi">Kdenlive</name>
<name xml:lang="fr">Kdenlive</name>
<name xml:lang="gl">Kdenlive</name>
<name xml:lang="it">Kdenlive</name>
<name xml:lang="ko">Kdenlive</name>
<name xml:lang="nl">Kdenlive</name>
<name xml:lang="nn">Kdenlive</name>
<name xml:lang="pl">Kdenlive</name>
<name xml:lang="pt">Kdenlive</name>
<name xml:lang="pt-BR">Kdenlive</name>
<name xml:lang="ru">Kdenlive</name>
<name xml:lang="sk">Kdenlive</name>
<name xml:lang="sl">Kdenlive</name>
<name xml:lang="sv">Kdenlive</name>
@@ -33,25 +37,28 @@
<name xml:lang="zh-TW">Kdenlive</name>
<summary>Video Editor</summary>
<summary xml:lang="ar">محرّر فيديوهات</summary>
<summary xml:lang="ast">Editor de videu</summary>
<summary xml:lang="bs">Video uređivač</summary>
<summary xml:lang="ca">Editor de vídeo</summary>
<summary xml:lang="ca-valencia">Editor de vídeo</summary>
<summary xml:lang="cs">Editor videí</summary>
<summary xml:lang="cs">Editor videa</summary>
<summary xml:lang="da">Videoredigering</summary>
<summary xml:lang="de">Video-Editor</summary>
<summary xml:lang="el">Επεξεργαστής βίντεο</summary>
<summary xml:lang="en-GB">Video Editor</summary>
<summary xml:lang="es">Editor de video</summary>
<summary xml:lang="et">Videoredaktor</summary>
<summary xml:lang="eu">Bideo editorea</summary>
<summary xml:lang="fi">Videoeditori</summary>
<summary xml:lang="fr">Éditeur vidéo</summary>
<summary xml:lang="gl">Editor de vídeo</summary>
<summary xml:lang="it">Editor video</summary>
<summary xml:lang="ko">동영상 편집기</summary>
<summary xml:lang="nl">Videobewerker</summary>
<summary xml:lang="nn">Videoredigering</summary>
<summary xml:lang="pl">Edytor wideo</summary>
<summary xml:lang="pt">Editor de Vídeo</summary>
<summary xml:lang="pt-BR">Editor de Vídeo</summary>
<summary xml:lang="ru">Видеоредактор</summary>
<summary xml:lang="sk">Editor videa</summary>
<summary xml:lang="sl">Urejevalnik videa</summary>
<summary xml:lang="sv">Videoeditor</summary>
@@ -62,17 +69,22 @@
<summary xml:lang="zh-TW">影像編輯器</summary>
<description>
<p>Kdenlive is a non linear video editor. It is based on the MLT framework and accepts many audio and video formats, allows you to add effects, transitions and render into the format of your choice.</p>
<p xml:lang="ast">Kdenlive ye un editor de videu non llinial. Básase nel framework MLT y aceuta muchos formatos d'audiu y videu, permítete amestar efeutos, transiciones y renderizar nel formatu de la to escoyeta.</p>
<p xml:lang="ar">«كدينلايڤ» هو محرّر فيديوهات غير خطّي. بُني على إطار عمل MLT ويقبل العديد من نُسق الصّوت والفيديو. كما ويسمح بإضافة التّأثيرات والانتقالات.</p>
<p xml:lang="ca">El Kdenlive és un editor no lineal de vídeo. Està basat en l'entorn de treball MLT i accepta molts formats d'àudio i vídeo, permetent afegir efectes, transicions i representacions en el format de la vostra elecció.</p>
<p xml:lang="ca-valencia">El Kdenlive és un editor no lineal de vídeo. Està basat en l'entorn de treball MLT i accepta molts formats d'àudio i vídeo, permetent afegir efectes, transicions i representacions en el format de la vostra elecció.</p>
<p xml:lang="cs">Kdenlive je nelineární video editor. Je založený na frameworku MLT a přehrává mnoho zvukových a video formátů, umožňuje přidat efekty, přechody a renderuje do formátu podle vašeho výběru.</p>
<p xml:lang="da">Kdenlive er et ikke-lineært videoredigeringsprogram. Det er baseret på MLT-framework og accepterer mange lyd- og videoformater, som giver dig mulighed for at tilføje effekter, overgange og rendere i det format du ønsker.</p>
<p xml:lang="de">Kdenlive ist ein Video-Editor für nichtlinearen Schnitt. Es basiert auf MLT und verarbeitet viele Audio- und Video-Formate. Sie können Effekte und Übergänge benutzen und in Formate Ihrer Wahl umwandeln.</p>
<p xml:lang="el">Το Kdenlive είναι ένας μη γραμμικός επεξεργαστής βίντεο. Βασίζεται στο πλαίσιο εργασίας MLT και δέχεται πολλούς τύπους ήχου και βίντεο, επιτρέπει την προσθήκη εφέ, μεταβάσεων και αποτύπωσης στον τύπο αποθήκευσης της επιλογής σας.</p>
<p xml:lang="en-GB">Kdenlive is a non linear video editor. It is based on the MLT framework and accepts many audio and video formats, allows you to add effects, transitions and render into the format of your choice.</p>
<p xml:lang="es">Kdenlive es un editor no lineal de video. Está basado en la infraestructura MLT y acepta numerosos formatos de audio y video, permitiendo agregar efectos, transiciones y procesar el video final en el formato deseado.</p>
<p xml:lang="et">Kdenline on mittelineaarne videoredaktor. See tugineb MLT raamistikule ja võimaldab tarvitada paljusid heli- ja videovorminguid, lisada efekte ja üleminekuid ning renderdada tulemuse vajalikku vormingusse.</p>
<p xml:lang="eu">Kdenlive bideo editore ez-linear bat da. MLT azpiegituran oinarritua dago eta audio eta bideo formatu asko onartzen ditu, efektuak gehitzeko aukera eskaintzen dizu, trantsizioak eta zuk nahi duzun formatuan errendatzea.</p>
<p xml:lang="fi">Kdenlive on epälineaarinen videoeditori. Se perustuu MLT-frameworkiin ja toimii monen eri ääni- ja videoformaatin kanssa. Voit lisätä efektejä ja siirtymiä, sekä renderöidä projektin haluamaasi tiedostomuotoon.</p>
<p xml:lang="fr">Kdenlive est un éditeur vidéo non-linéaire. Il est basé sur le moteur MLT et accèpte de nombreux formats audio et vidéos, permet d'ajouter des effets et transitions, et exporte le rendu dans le format de votre choix.</p>
<p xml:lang="fr">Kdenlive est un éditeur vidéo non-linéaire. Il utilise le moteur MLT et accèpte de nombreux formats audio et vidéos, permet d'ajouter des effets et transitions, et exporte le rendu dans le format de votre choix.</p>
<p xml:lang="gl">Kdenlive é un editor de vídeo non lineal. Está baseado na infraestrutura MLT e permite moitos formatos de son e vídeo, e permite engadir efectos, engadir transicións, e exportar en calquera formato.</p>
<p xml:lang="it">Kdenlive è un editor video non lineare. È basato sull'infrastruttura MLT e accetta numerosi formati audio e video, consente di aggiungere effetti, transizioni e produrre il formato che si desidera.</p>
<p xml:lang="ko">Kdenlive는 비선형 동영상 편집기입니다. MLT 프레임워크를 사용하며 여러 음악 및 동영상 형식을 지원하고, 효과 및 트랜지션을 추가할 수 있으며, 원하는 형식으로 렌더링할 수 있습니다.</p>
<p xml:lang="nl">Kdenlive is een niet lineaire videobewerker. Het is gebaseerd op het MLT-framework en accepteert vele audio- en video-formaten, biedt de mogelijkheid effecten en overgangen toe te voegen en om te zetten naar het formaat van uw keuze.</p>
<p xml:lang="nn">Kdenlive er eit program for ikkje-lineær videoredigering. Det er basert på MLT-rammeverket og støttar mange ulike video- og lydformat. Du kan leggja til spesialeffektar og overgangar, og eksportera til ulike filformat.</p>
<p xml:lang="pl">Kdenlive jest nieliniowym edytorem wideo. Oparty jest na szkielecie MLT i może pracować na wielu formatach obrazu i dźwięku, umożliwia dodawanie efektów, przejść i renderowanie ich do dowolnego formatu.</p>
@@ -88,25 +100,28 @@
<p xml:lang="zh-TW">Kdenlive 是一套非線性的影像編輯器。基於 MLT 框架,可接受許多影音格式,讓您可以加入特效,過場並轉編碼成您選擇的格式。</p>
<p>Features:</p>
<p xml:lang="ar">الميزات:</p>
<p xml:lang="ast">Carauterístiques:</p>
<p xml:lang="bs">Svojstva:</p>
<p xml:lang="ca">Característiques:</p>
<p xml:lang="ca-valencia">Característiques:</p>
<p xml:lang="cs">Vlastnosti:</p>
<p xml:lang="da">Funktioner:</p>
<p xml:lang="de">Funktionen:</p>
<p xml:lang="el">Χαρακτηριστικά:</p>
<p xml:lang="en-GB">Features:</p>
<p xml:lang="es">Características:</p>
<p xml:lang="et">Omadused:</p>
<p xml:lang="eu">Eginbideak:</p>
<p xml:lang="fi">Ominaisuuksia:</p>
<p xml:lang="fr">Fonctionnalités :</p>
<p xml:lang="gl">Funcionalidades:</p>
<p xml:lang="it">Funzionalità:</p>
<p xml:lang="ko">기능:</p>
<p xml:lang="nl">Mogelijkheden:</p>
<p xml:lang="nn">Funksjonar:</p>
<p xml:lang="pl">Możliwości:</p>
<p xml:lang="pt">Funcionalidades:</p>
<p xml:lang="pt-BR">Funcionalidades:</p>
<p xml:lang="ru">Возможности:</p>
<p xml:lang="sk">Funkcie:</p>
<p xml:lang="sl">Zmožnosti:</p>
<p xml:lang="sv">Funktioner:</p>
@@ -117,17 +132,22 @@
<p xml:lang="zh-TW">功能:</p>
<ul>
<li>Intuitive multitrack interface.</li>
<li xml:lang="ast">Interfaz multi-pista intuitiva.</li>
<li xml:lang="ar">واجهة متعدّدة المسارات بديهيّة.</li>
<li xml:lang="ca">Interfície multipista intuïtiva.</li>
<li xml:lang="ca-valencia">Interfície multipista intuïtiva.</li>
<li xml:lang="cs">Intuitivní vícepohledové rozhraní.</li>
<li xml:lang="da">Intuitiv multispor-grænseflade.</li>
<li xml:lang="de">Intuitive Mehrspur-Benutzeroberfläche.</li>
<li xml:lang="el">Διαισθητική πολυκάναλη διεπαφή.</li>
<li xml:lang="en-GB">Intuitive multitrack interface.</li>
<li xml:lang="es">Interfaz multipista intuitiva.</li>
<li xml:lang="et">Hõlpsasti mõistetav mitme paneeliga liides</li>
<li xml:lang="eu">Intuiziozko aztarna-anitzeko interfazea.</li>
<li xml:lang="fi">Selkeä moniraitainen käyttöliittymä</li>
<li xml:lang="fr">Interface multipiste intuitive.</li>
<li xml:lang="gl">Interface intuitiva con varias pistas.</li>
<li xml:lang="it">Interfaccia multitraccia intuitiva.</li>
<li xml:lang="ko">사용하기 편한 다중 트랙 인터페이스.</li>
<li xml:lang="nl">Intuïtief interface met meerdere tracks.</li>
<li xml:lang="nn">Intuitivt fleirsporsgrensesnitt.</li>
<li xml:lang="pl">Intuicyjny interfejs wielościeżkowy.</li>
@@ -143,17 +163,21 @@
<li xml:lang="zh-TW">直覺的多軌介面</li>
<li>Many effects and transitions.</li>
<li xml:lang="ar">تأثيرات وانتقالات عديدة.</li>
<li xml:lang="ast">Munchos efeutos y transiciones.</li>
<li xml:lang="ca">Molts efectes i transicions.</li>
<li xml:lang="ca-valencia">Molts efectes i transicions.</li>
<li xml:lang="cs">Spousta efektů a přechodů.</li>
<li xml:lang="da">Mange effekter og overgange.</li>
<li xml:lang="de">Viele Effekte und Übergänge.</li>
<li xml:lang="el">Πολλά εφέ και μεταβάσεις.</li>
<li xml:lang="en-GB">Many effects and transitions.</li>
<li xml:lang="es">Muchos efectos y transiciones.</li>
<li xml:lang="et">Palju efekte ja üleminekuid</li>
<li xml:lang="eu">Efektu eta trantsizio ugari.</li>
<li xml:lang="fi">Monia erilaisia efektejä ja siirtymiä</li>
<li xml:lang="fr">Nombreux effets et transitions.</li>
<li xml:lang="gl">Moitos efectos e transicións.</li>
<li xml:lang="it">Numerosi effetti e transizioni.</li>
<li xml:lang="ko">다양한 효과와 트랜지션.</li>
<li xml:lang="nl">Veel effecten en overgangen.</li>
<li xml:lang="nn">Mange effektar og overgangar.</li>
<li xml:lang="pl">Wiele efektów i przejść.</li>
@@ -171,14 +195,19 @@
<li xml:lang="ar">نطاقات الألوان</li>
<li xml:lang="ca">Àmbits de color</li>
<li xml:lang="ca-valencia">Àmbits de color</li>
<li xml:lang="cs">Rozsahy barev</li>
<li xml:lang="da">Farveskoper</li>
<li xml:lang="de">Farbbereiche</li>
<li xml:lang="el">Εμβέλειες χρωμάτων</li>
<li xml:lang="en-GB">Colour scopes</li>
<li xml:lang="es">Indicadores de color</li>
<li xml:lang="et">Värviskoobid</li>
<li xml:lang="eu">Kolore esparruak</li>
<li xml:lang="fi">Väriavaruuksien säätömahdollisuus</li>
<li xml:lang="fr">Graphes des couleurs</li>
<li xml:lang="gl">Ámbitos de cores.</li>
<li xml:lang="it">Diagrammi di colore</li>
<li xml:lang="ko">색상 범위</li>
<li xml:lang="nl">Kleurreeksen</li>
<li xml:lang="nn">Fargeskop</li>
<li xml:lang="pl">Zakresy barw</li>
@@ -194,17 +223,21 @@
<li xml:lang="zh-TW">顏色範圍</li>
<li>Basic DVD Wizard</li>
<li xml:lang="ar">مُرشد DVD أساسيّ</li>
<li xml:lang="ast">Encontu básicu pa DVD</li>
<li xml:lang="ca">Assistent bàsic per als DVD</li>
<li xml:lang="ca-valencia">Assistent bàsic per als DVD</li>
<li xml:lang="cs">Základní průvodce DVD</li>
<li xml:lang="da">Grundlæggende dvd-guide</li>
<li xml:lang="de">Einfacher DVD-Assistent</li>
<li xml:lang="el">Βασικός οδηγός DVD</li>
<li xml:lang="en-GB">Basic DVD Wizard</li>
<li xml:lang="es">Asistente básico de DVD</li>
<li xml:lang="et">Lihtne DVD nõustaja</li>
<li xml:lang="eu">Oinarrizko DVD morroia</li>
<li xml:lang="fi">Yksinkertainen DVD:n luonti</li>
<li xml:lang="fr">Assistant DVD de base</li>
<li xml:lang="gl">Asistente básico para DVD</li>
<li xml:lang="it">Procedura guidata di base DVD</li>
<li xml:lang="ko">기본 DVD 마법사</li>
<li xml:lang="nl">Basis dvd-assistent</li>
<li xml:lang="nn">Enkel DVD-vegvisar</li>
<li xml:lang="pl">Pomocnik podstawowego DVD</li>
@@ -220,12 +253,34 @@
<li xml:lang="zh-TW">基本 DVD 精靈</li>
</ul>
</description>
<releases>
<release date="2018-10-11" version="18.08.2"/>
</releases>
<url type="homepage">https://kdenlive.org/</url>
<url type="bugtracker">https://bugs.kde.org</url>
<url type="help">https://userbase.kde.org/Kdenlive/Manual</url>
<url type="donation">https://www.kde.org/community/donations/?app=kdenlive&amp;source=appdata</url>
<screenshots>
<screenshot type="source">
<image>https://kdenlive.org/wp-content/data/kdenlive-screenshot.png</image>
<caption>Kdenlive 18.08</caption>
<caption xml:lang="ca">Kdenlive 18.08</caption>
<caption xml:lang="ca-valencia">Kdenlive 18.08</caption>
<caption xml:lang="de">Kdenlive 18.08</caption>
<caption xml:lang="en-GB">Kdenlive 18.08</caption>
<caption xml:lang="es">Kdenlive 18.08</caption>
<caption xml:lang="fi">Kdenlive 18.08</caption>
<caption xml:lang="fr">Kdenlive 18.08</caption>
<caption xml:lang="gl">Kdenlive 18.08</caption>
<caption xml:lang="it">Kdenlive 18.08</caption>
<caption xml:lang="nl">Kdenlive 18.08</caption>
<caption xml:lang="pt">Kdenlive 18.08</caption>
<caption xml:lang="pt-BR">Kdenlive 18.08</caption>
<caption xml:lang="sv">Kdenlive 18.08</caption>
<caption xml:lang="uk">Kdenlive 18.08</caption>
<caption xml:lang="x-test">xxKdenlive 18.08xx</caption>
<caption xml:lang="zh-CN">Kdenlive 18.08</caption>
<caption xml:lang="zh-TW">Kdenlive 18.08</caption>
<image>https://cdn.kde.org/screenshots/kdenlive/screenshot-monitors.png</image>
</screenshot>
</screenshots>
<project_group>KDE</project_group>

View File

@@ -1,7 +1,7 @@
# KDE Config File
[Desktop Entry]
Name=Kdenlive
Name[ast]=Kdenlive
Name[ar]=كدينلايڤ
Name[bs]=Kdenlive
Name[ca]=Kdenlive
Name[ca@valencia]=Kdenlive
@@ -12,6 +12,7 @@ Name[el]=Kdenlive
Name[en_GB]=Kdenlive
Name[es]=Kdenlive
Name[et]=Kdenlive
Name[eu]=Kdenlive
Name[fi]=Kdenlive
Name[fr]=Kdenlive
Name[ga]=Kdenlive
@@ -20,6 +21,7 @@ Name[hu]=Kdenlive
Name[it]=Kdenlive
Name[ja]=Kdenlive
Name[km]=Kdenlive
Name[ko]=Kdenlive
Name[lt]=Kdenlive
Name[lv]=Kdenlive
Name[mr]=के-डि-एनलाइव्ह
@@ -43,17 +45,17 @@ Name[zh_CN]=Kdenlive
Name[zh_TW]=Kdenlive
GenericName=Video Editor
GenericName[ar]=محرّر فيديوهات
GenericName[ast]=Editor de videu
GenericName[bs]=Video uređivač
GenericName[ca]=Editor de vídeo
GenericName[ca@valencia]=Editor de vídeo
GenericName[cs]=Editor videí
GenericName[cs]=Editor videa
GenericName[da]=Videoredigering
GenericName[de]=Video-Editor
GenericName[el]=Επεξεργαστής βίντεο
GenericName[en_GB]=Video Editor
GenericName[es]=Editor de video
GenericName[et]=Videoredaktor
GenericName[eu]=Bideo editorea
GenericName[fi]=Videomuokkain
GenericName[fr]=Éditeur vidéo
GenericName[ga]=Eagarthóir Físe
@@ -62,6 +64,7 @@ GenericName[hu]=Videoszerkesztő
GenericName[it]=Editor video
GenericName[ja]=ビデオエディタ
GenericName[km]=កម្មវិធី​កែសម្រួល​វីដេអូ
GenericName[ko]=동영상 편집기
GenericName[lt]=Video redaktorius
GenericName[lv]=Video redaktors
GenericName[mr]=व्हिडीओ संपादक
@@ -81,46 +84,36 @@ GenericName[uk]=Відеоредактор
GenericName[x-test]=xxVideo Editorxx
GenericName[zh_CN]=视频编辑器
GenericName[zh_TW]=影像編輯器
Comment=Nonlinear video editor for KDE
Comment[ar]=محرّر فيديوهات غير خطّيّ لكدي
Comment[ast]=Editor de videu non llinial pa KDE
Comment[bs]=Nelinearni video uređivač za KDE
Comment[ca]=Editor de vídeo no lineal per al KDE
Comment[ca@valencia]=Editor de vídeo no lineal per al KDE
Comment[cs]=Nelineární editor videí pro KDE
Comment[da]=Ikke-lineær videoredigering til KDE
Comment[de]=Nichtlinearer Video-Editor für KDE
Comment[el]=Μη γραμμικός επεξεργαστής βίντεο για το KDE
Comment[en_GB]=Nonlinear video editor for KDE
Comment[es]=Editor no lineal de video para KDE
Comment[et]=KDE mittelineaarne videoredaktor
Comment[fi]=Epälineaarinen videomuokkain KDE:lle
Comment[fr]=Éditeur vidéo non linéaire pour KDE
Comment[gl]=Editor de vídeo non linear para KDE
Comment[hu]=Nemlineáris videoszerkesztő a KDE-hez
Comment[it]=Editor di video non lineare per KDE
Comment[ja]=KDE 向けノンリニアビデオエディタ
Comment[km]=កម្មវិធី​កែសម្រួល​វីដេអូ​មិន​លីនេអ៊ែរ​សម្រាប់ KDE
Comment[lt]=Nelinijinis veido redaktorius skirtas KDE
Comment[lv]=Nelineārais video redaktors KDE videi
Comment[mr]=केडीई करिता अरेषीय व्हिडीओ संपादक
Comment[nb]=Videoredigeringsprogram for KDE med dataklipping
Comment[nl]=Niet-lineaire video-bewerker voor KDE
Comment=Nonlinear video editor by KDE
Comment[ar]=محرّر فيديوهات غير خطّيّ من كدي
Comment[ca]=Editor de vídeo no lineal, creat per la comunitat KDE
Comment[ca@valencia]=Editor de vídeo no lineal, creat per la comunitat KDE
Comment[cs]=Nelineární editor videa od KDE
Comment[da]=Ikke-lineært videoredigeringsprogram af KDE
Comment[de]=Nichtlinearer Video-Editor von KDE
Comment[el]=Μη γραμμικός επεξεργαστής βίντεο από το KDE
Comment[en_GB]=Non-linear video editor by KDE
Comment[es]=Editor no lineal de video de KDE
Comment[eu]=KDEren bideo editore ez-lineala
Comment[fi]=KDE:n epälineaarinen videomuokkain
Comment[fr]=Éditeur vidéo non linéaire par KDE
Comment[gl]=Editor de vídeo non lineal por KDE
Comment[it]=Editor di video non lineare di KDE
Comment[ko]=KDE의 비선형 동영상 편집기
Comment[nl]=Niet-lineaire video-bewerker door KDE
Comment[nn]=Program for ikkje-lineær videoredigering
Comment[pl]=Nieliniowy edytor wideo dla KDE
Comment[pt]=Editor de vídeo não-linear para o KDE
Comment[pt_BR]=Editor de vídeo não-linear para o KDE
Comment[ro]=Redactor de imagini neliniar pentru KDE
Comment[pl]=Nieliniowy edytor wideo w ramach KDE
Comment[pt]=Editor de vídeo não-linear do KDE
Comment[pt_BR]=Editor de vídeo não-linear do KDE
Comment[ru]=Нелинейный видеоредактор от KDE
Comment[sk]=Nelineárny editor videa pre KDE
Comment[sl]=Ne-linearni urejevalnik videa za KDE
Comment[sv]=Icke-linjär videoeditor för KDE
Comment[sl]=Ne-linearni urejevalnik videa s strani KDE
Comment[sv]=Icke-linjär videoeditor av KDE
Comment[tr]=KDE için doğrusal olmayan video düzenleyici
Comment[ug]=KDE ئۈچۈن سىزىقسىز سىن تەھرىرلىگۈچ
Comment[uk]=Нелінійний редактор відео для KDE
Comment[x-test]=xxNonlinear video editor for KDExx
Comment[zh_CN]=KDE 的非线性视频编辑
Comment[zh_TW]=KDE 上的非線性影像編輯器
Comment[uk]=Нелінійний редактор відео від KDE
Comment[x-test]=xxNonlinear video editor by KDExx
Comment[zh_CN]=KDE 推出的非线性视频编辑器
Comment[zh_TW]=來自 KDE 的非線性影像編輯
Type=Application
Exec=kdenlive %U
Icon=kdenlive
@@ -130,25 +123,32 @@ Terminal=false
MimeType=application/x-kdenlive;
Categories=Qt;KDE;AudioVideo;AudioVideoEditing;
Keywords=editing;video;audio;mlt;kde;
Keywords[ar]=تحرير;فيديو;صوت;كدي;واجهة;مسارات;تعدد;
Keywords[ca]=edició;vídeo;àudio;mlt;kde;
Keywords[ca@valencia]=edició;vídeo;àudio;mlt;kde;
Keywords[cs]=úprava;video;zvuk;mlt;kde;
Keywords[da]=redigering;video;lyd;mlt;kde;
Keywords[de]=Editing;Bearbeitung;Schnitt;Videoschnitt;Video;Audio;MLT;
Keywords[el]=επεξεργασία;βίντεο;ήχος;mlt;kde;
Keywords[en_GB]=editing;video;audio;mlt;kde;
Keywords[es]=edición;video;audio;mlt;kde;
Keywords[et]=redigeerimine;muutmine;video;audio;heli;mlt;kde;
Keywords[eu]=editatzea;bideoa;audioa;mlt;kde;
Keywords[fi]=editing;video;audio;mlt;kde;editointi;ääni;
Keywords[fr]=montage;vidéo;audio;mlt;kde;
Keywords[gl]=editing;edición;video;vídeo;audio;son;mlt;kde;
Keywords[it]=editing;video;audio;mlt;kde;
Keywords[ko]=editing;video;audio;mlt;kde;편집;비디오;오디오;동영상;음악;
Keywords[nl]=bewerken;video;audio;mlt;kde;
Keywords[nn]=redigering;video;lyd;mlt;kde;
Keywords[pl]=edytowanie;video;wideo;filmy;audio;dźwięk;mlt;kde;
Keywords[pt]=edição;vídeo;áudio;MLT;kde;
Keywords[pt_BR]=edição;vídeo;áudio;mlt;kde;
Keywords[ru]=editing;video;audio;редактирование;видео;аудио;mlt;kde;
Keywords[sk]=editovanie;video;audio;mlt;kde;
Keywords[sl]=urejanje;video;zvok;mlt;kde;
Keywords[sv]=redigering;video;ljud;mlt;kde;
Keywords[tr]=editing;video;audio;mlt;kde;
Keywords[uk]=editing;video;audio;mlt;kde;редагування;відео;звук;аудіо;млт;кдє;
Keywords[x-test]=xxeditingxx;xxvideoxx;xxaudioxx;xxmltxx;xxkdexx;
Keywords[zh_CN]=editing;video;audio;mlt;kde;编辑;视频;音频;

View File

@@ -2,7 +2,7 @@
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
<mime-type type="application/x-kdenlive">
<comment>Kdenlive video project document</comment>
<comment xml:lang="ast">Documentu de proyeutu de videu Kdenlive</comment>
<comment xml:lang="ar">مستند مشروع «كدينلايڤ» ڤديوهيّ</comment>
<comment xml:lang="bs">Kdenlive video projekt dokument</comment>
<comment xml:lang="ca">document de projecte de vídeo del Kdenlive</comment>
<comment xml:lang="ca@valencia">document de projecte de vídeo del Kdenlive</comment>
@@ -13,6 +13,7 @@
<comment xml:lang="en_GB">Kdenlive video project document</comment>
<comment xml:lang="es">Documento de proyecto de video de Kdenlive</comment>
<comment xml:lang="et">Kdenlive'i videoprojekti dokument</comment>
<comment xml:lang="eu">Kdenlive bideo proiektu dokumentua</comment>
<comment xml:lang="fi">Kdenlive-videoprojektitiedosto</comment>
<comment xml:lang="fr">Projet vidéo Kdenlive</comment>
<comment xml:lang="gl">Documento dun proxecto de vídeo de Kdenlive</comment>
@@ -36,7 +37,7 @@
</mime-type>
<mime-type type="application/x-kdenlivetitle">
<comment>Kdenlive video title</comment>
<comment xml:lang="ast">Títulu de videu Kdenlive</comment>
<comment xml:lang="ar">عنوان «كدينلايڤ» ڤديوهيّ</comment>
<comment xml:lang="bs">Kdenlive video naslov</comment>
<comment xml:lang="ca">títol de vídeo del Kdenlive</comment>
<comment xml:lang="ca@valencia">títol de vídeo del Kdenlive</comment>
@@ -47,6 +48,7 @@
<comment xml:lang="en_GB">Kdenlive video title</comment>
<comment xml:lang="es">Título de video de Kdenlive</comment>
<comment xml:lang="et">Kdenlive'i videotiitel</comment>
<comment xml:lang="eu">Kdenlive video izenburua</comment>
<comment xml:lang="fi">Kdenlive-video-otsikko</comment>
<comment xml:lang="fr">Titre vidéo Kdenlive</comment>
<comment xml:lang="gl">Título de vídeo de Kdenlive</comment>

View File

@@ -6,6 +6,9 @@
<parameter type="animatedrect" name="rect" default="0 0 %width %height 1">
<name>Rectangle</name>
</parameter>
<parameter type="animated" name="rotation" max="360" min="-360" default="0" notintimeline="1">
<name>Rotation</name>
</parameter>
<parameter type="list" name="compositing" default="0" paramlist="0;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;6;8">
<paramlistdisplay>Alpha blend,Xor,Plus,Multiply,Screen,Overlay,Darken,Lighten,Color dodge,Color burn,Hard light,Soft light,Difference,Exclusion,Bitwise or,Bitwise and,Bitwise xor,Bitwise nor,Bitwise nand,Bitwise not xor,Destination in,Destination out</paramlistdisplay>
<name>Compositing</name>
@@ -13,5 +16,8 @@
<parameter type="bool" name="distort" default="0" min="0" max="1">
<name>Distort</name>
</parameter>
<parameter type="bool" name="rotate_center" default="1" min="0" max="1">
<name>Rotate from center</name>
</parameter>
</transition>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 238 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 249 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 313 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -16,8 +16,8 @@
<!-- TRANS:ROLES_OF_TRANSLATORS -->
</authorgroup>
<legalnotice>&FDLNotice;</legalnotice>
<date>2011-06-17</date>
<releaseinfo>0.8.2</releaseinfo>
<date>2018-10-27</date>
<releaseinfo>Applications 18.12</releaseinfo>
<abstract>
<para></para>
</abstract>
@@ -27,16 +27,17 @@
<keyword>video</keyword>
</keywordset>
</bookinfo>
<!--userbase <timestamp>2011-06-17T15:39:59Z</timestamp>-->
<!--userbase <timestamp>2018-10-27T11:21:38Z</timestamp>-->
<!--userbase-content-->
<chapter id="creating-a-new-project"><title>Creating a new project</title>
<chapter id="quick-start"><title>Quick Start</title>
<sect1 id="creating-a-new-project"><title>Creating a new project</title>
<para>
<screenshot>
<screeninfo></screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="Kdenlive_Quickstart-Folder-Structure.png" format="PNG"/>
<imagedata fileref="kdenlive_quickstart-folder-structure.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Kdenlive directory structure</phrase>
@@ -45,16 +46,20 @@
<para>Kdenlive directory structure</para>
</caption>
</mediaobject>
</screenshot></para>
<para>The first step is creating a new (empty) folder for our new project. I will call it <filename>quickstart-tutorial/</filename> in this tutorial. Then get some sample video clips, or download them from here:<ulink url="http://granjow.net/uploads/kdenlive/manual/kdenlive-tutorial-videos-2011-avi.tar.bz2">kdenlive-tutorial-videos-2011-avi.tar.bz2</ulink> (7 MB)<footnote><para>If you prefer Theora (which you probably dont since Ogg Video usually causes problems), you can alternatively download <ulink url="http://granjow.net/uploads/kdenlive/manual/kdenlive-tutorial-videos-2011-ogv.tar.bz2">kdenlive-tutorial-videos-2011-ogv.tar.bz2</ulink>.</para></footnote>, and extract them to &eg; a <filename>quickstart-tutorial/Videos/</filename> subfolder inside the project folder.</para>
<para>The image on the left shows the suggested directory structure: Each project has its own directory, with video files in the <filename>Videos</filename> subdirectory, audio files in the <filename>Audio</filename> directory, &etc; (<ulink url="http://userbase.kde.org/Special:myLanguage/Kdenlive/Manual/Projects_and_Files#File_Structure">read more</ulink>)</para>
<para>(The tutorial from now on assumes that you use the sample videos provided, but it works with any.)</para>
</screenshot>
</para>
<para>The first step is creating a new (empty) folder for our new project. I will call it <filename>quickstart-tutorial/</filename> in this tutorial. Then get some sample video clips, or download them from here:<ulink url="http://granjow.net/uploads/kdenlive/manual/kdenlive-tutorial-videos-2011-avi.tar.bz2">kdenlive-tutorial-videos-2011-avi.tar.bz2</ulink> (7 MB)<footnote><para>If you prefer Theora (which you probably dont since Ogg Video usually causes problems), you can alternatively download <ulink url="http://granjow.net/uploads/kdenlive/manual/kdenlive-tutorial-videos-2011-ogv.tar.bz2">kdenlive-tutorial-videos-2011-ogv.tar.bz2</ulink>.</para></footnote>, and extract them to &eg; a <filename>quickstart-tutorial/Videos/</filename> subfolder inside the project folder.
</para>
<para>The image on the left shows the suggested directory structure: Each project has its own directory, with video files in the <filename>Videos</filename> subdirectory, audio files in the <filename>Audio</filename> directory, &etc; (<ulink url="http://userbase.kde.org/Special:myLanguage/Kdenlive/Manual/Projects_and_Files#File_Structure">read more</ulink>)
</para>
<para>(The tutorial from now on assumes that you use the sample videos provided, but it works with any.)
</para>
<para>
<screenshot>
<screeninfo></screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="Kdenlive_Quickstart-New-Project.png" format="PNG"/>
<imagedata fileref="kdenlive_quickstart-new-project.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>New Project dialog</phrase>
@@ -63,17 +68,20 @@
<para>New Project dialog</para>
</caption>
</mediaobject>
</screenshot></para>
<para>Open <application>Kdenlive</application> and create a new project (<menuchoice><guimenu>File</guimenu><guimenuitem>New</guimenuitem></menuchoice>).</para>
<para>Choose the previously created project folder (<filename>quickstart-tutorial/</filename>) and select an appropriate project profile. The video files provided above are 720p, 23.98 fps.<footnote><para><ulink url="http://en.wikipedia.org/wiki/720p">720</ulink> is the video height, p stands for <ulink url="http://en.wikipedia.org/wiki/Progressive_scan">progressive scan</ulink> in contrast to <ulink url="http://en.wikipedia.org/wiki/Interlaced_video">interlaced video</ulink>, and the fps number denotes the number of full frames per second.</para></footnote> If you are using your own files and dont know which one to use, <application>Kdenlive</application> will suggest an appropriate one when the first clip is added, so you can leave the field on whatever it is.</para>
</chapter>
<chapter id="adding-clips"><title>Adding clips</title>
</screenshot>
</para>
<para>Open &kdenlive; and create a new project (<menuchoice><guimenu>File</guimenu><guimenuitem>New</guimenuitem></menuchoice>).
</para>
<para>Choose the previously created project folder (<filename>quickstart-tutorial/</filename>) and select an appropriate project profile. The video files provided above are 720p, 23.98 fps.<footnote><para><ulink url="http://en.wikipedia.org/wiki/720p">720</ulink> is the video height, p stands for <ulink url="http://en.wikipedia.org/wiki/Progressive_scan">progressive scan</ulink> in contrast to <ulink url="http://en.wikipedia.org/wiki/Interlaced_video">interlaced video</ulink>, and the fps number denotes the number of full frames per second.</para></footnote> If you are using your own files and dont know which one to use, &kdenlive; will suggest an appropriate one when the first clip is added <footnote><para>Provided Configure Kdenlive Settings under <ulink url="http://userbase.kde.org/Special:myLanguage/Kdenlive/Manual/Settings_Menu/Configure_Kdenlive#Misc">Misc</ulink> is set to <emphasis>Check if first added clip matches project profile</emphasis></para></footnote> , so you can leave the field on whatever it is.
</para>
</sect1>
<sect1 id="adding-clips"><title>Adding clips</title>
<para>
<screenshot>
<screeninfo></screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="Kdenlive_Quickstart-Add-Clips.png" format="PNG"/>
<imagedata fileref="kdenlive_quickstart-add-clips.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Project Tree: Adding video clips</phrase>
@@ -82,30 +90,34 @@
<para>Project Tree: Adding video clips</para>
</caption>
</mediaobject>
</screenshot></para>
<para>Now that the project is ready, lets start adding some clips (&ie; the ones you downloaded). This works via the <emphasis>Project Tree widget</emphasis>; a click on the <guilabel>Add Clip</guilabel> icon directly opens the file dialog, a click on the small arrow shows a list of additional clip types that can be added as well. Video clips, audio clips, images, and other <application>Kdenlive</application> projects can be added via the default <guilabel>Add Clip</guilabel> dialog.</para>
</screenshot>
</para>
<para>Now that the project is ready, lets start adding some clips (&ie; the ones you downloaded). This works via the <emphasis>Project Tree widget</emphasis>; a click on the <guilabel>Add Clip</guilabel> icon <inlinemediaobject> <imageobject> <imagedata fileref="Icon-add-clip.png" format="PNG"/> </imageobject> </inlinemediaobject> directly opens the file dialog, a click on the small arrow shows a list of additional clip types that can be added as well. Video clips, audio clips, images, and other &kdenlive; projects can be added via the default <guilabel>Add Clip</guilabel> dialog.
</para>
<para>
<screenshot>
<screeninfo></screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="Kdenlive_Quickstart-Mainwindow.png" format="PNG"/>
<imagedata fileref="kdenlive_quickstart-mainwindow.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Kdenlive 0.8 window with the tutorial files</phrase>
<phrase>Kdenlive 16.08 window with the tutorial files</phrase>
</textobject>
<caption>
<para>Kdenlive 0.8 window with the tutorial files</para>
<para>Kdenlive 16.08 window with the tutorial files</para>
</caption>
</mediaobject>
</screenshot></para>
<para>After loading the clips, <application>Kdenlive</application> will look similar to this. On the top left there is the already known project tree. Right of it are the monitors that show video; The clip monitor displays video from the original clips, the project monitor shows how the output video will look, with all effects, transitions, &etc; applied. The third, also very important, item is the timeline (below the monitors): This is the place where the video clips will be edited. There are two different types of tracks, Video and Audio. Video tracks can contain any kind of clip, audio tracks as well but when dropping a video file to the audio track, only the audio will be used.</para>
</screenshot>
</para>
<para>After loading the clips, &kdenlive; will look similar to this. On the top left there is the already known project tree. Right of it are the monitors that show video; The clip monitor displays video from the original clips, the project monitor shows how the output video will look, with all effects, transitions, &etc; applied. The third, also very important, item is the timeline (below the monitors): This is the place where the video clips will be edited. There are two different types of tracks, Video and Audio. Video tracks can contain any kind of clip, audio tracks as well but when dropping a video file to the audio track, only the audio will be used.
</para>
<para>
<screenshot>
<screeninfo></screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="Kdenlive_Quickstart-Save-Project.png" format="PNG"/>
<imagedata fileref="kdenlive_quickstart-save-project.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Saving a Kdenlive project</phrase>
@@ -114,17 +126,22 @@
<para>Saving a Kdenlive project</para>
</caption>
</mediaobject>
</screenshot></para>
<para>Lets save the work via <menuchoice><guimenu>File</guimenu><guimenuitem>Save</guimenuitem></menuchoice>. This saves our project, &ie; where we placed the clips on the timeline, which effects we applied, and so on. It can <emphasis>not</emphasis> be played.<footnote><para>To be correct, it <emphasis>can</emphasis> be played using <varname>melt yourproject.kdenlive</varname>, but this is not the way you would want to present your final video since it is (most likely) too slow. Additionally, it only works if melt is installed.</para></footnote> The process of creating the final video is called <emphasis>Rendering</emphasis>.</para>
</chapter>
<chapter id="timeline"><title>Timeline</title>
<para>Now comes the actual editing. Project clips are combined to the final result on the timeline. They get there by drag and drop: Drag some Napoli (assuming you are using the files provided above, as in the rest of this quick start tutorial; If not, please make sure your screen is waterproof, and perhaps tomatoproof), and drop it onto the first track in the timeline.</para>
</screenshot>
</para>
<para>Lets save the work via <menuchoice><guimenu>File</guimenu><guimenuitem>Save</guimenuitem></menuchoice>. This saves our project, &ie; where we placed the clips on the timeline, which effects we applied, and so on. It can <emphasis>not</emphasis> be played.<footnote><para>To be correct, it <emphasis>can</emphasis> be played using <varname>melt yourproject.kdenlive</varname>, but this is not the way you would want to present your final video since it is (most likely) too slow. Additionally, it only works if melt is installed.</para></footnote> The process of creating the final video is called <emphasis>Rendering</emphasis>.
</para>
</sect1>
<sect1 id="timeline"><title>Timeline</title>
<para>See also <link linkend="timeline">Timeline section of the manual</link>
</para>
<para>Now comes the actual editing. Project clips are combined to the final result on the timeline. They get there by drag and drop: Drag some Napoli (assuming you are using the files provided above, as in the rest of this quick start tutorial; If not, please make sure your screen is waterproof, and perhaps tomatoproof) from the project tree, and drop it onto the first track in the timeline.
</para>
<para>
<screenshot>
<screeninfo></screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="Kdenlive_Quickstart-Timeline-Clips.png" format="PNG"/>
<imagedata fileref="kdenlive_quickstart-timeline-clips.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>First clips in the timeline</phrase>
@@ -133,14 +150,16 @@
<para>First clips in the timeline</para>
</caption>
</mediaobject>
</screenshot></para>
<para>Since some cutlery is needed as well, drop the spoon on the first track as well. Then drag the Napoli to the beginning of the timeline (otherwise the rendered video would start with some seconds of plain black), and the Spoon right after the Napoli, such that it looks like in the image on the left. (Where I have zoomed in with <keycombo>&Ctrl;<keycap>Wheel</keycap></keycombo>.)</para>
</screenshot>
</para>
<para>Since some cutlery is needed as well, grab the spoon clip and drop it on the first track as well. Then drag the Napoli to the beginning of the timeline (otherwise the rendered video would start with some seconds of plain black), and the Spoon right after the Napoli, such that it looks like in the image on the left. (Where I have zoomed in with <keycombo>&Ctrl;<keycap>Wheel</keycap></keycombo>.)
</para>
<para>
<screenshot>
<screeninfo></screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="Kdenlive_Quickstart-TimelineCursor.png" format="PNG"/>
<imagedata fileref="kdenlive_quickstart-timelinecursor.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Timeline cursor</phrase>
@@ -149,14 +168,16 @@
<para>Timeline cursor</para>
</caption>
</mediaobject>
</screenshot></para>
<para>The result can already be previewed by pressing <keycap>Space</keycap> (or the <guilabel>Play</guilabel> button in the project monitor). You will see the Napoli directly followed by a Spoon. If the timeline cursor is not at the beginning, the project monitor will start playing somewhere in the middle; you can move it by dragging it either on the timeline ruler or in the project monitor. If you prefer keyboard shortcuts, <keycombo>&Ctrl;<keycap>Home</keycap></keycombo> does the same for the monitor that is activated. (Select the <guilabel>Project Monitor</guilabel> if it is not selected yet before using the shortcut.)</para>
</screenshot>
</para>
<para>The result can already be previewed by pressing <keycap>Space</keycap> (or the <guilabel>Play</guilabel> button in the project monitor). You will see the Napoli directly followed by a Spoon. If the timeline cursor is not at the beginning, the project monitor will start playing somewhere in the middle; you can move it by dragging it either on the timeline ruler or in the project monitor. If you prefer keyboard shortcuts, <keycombo>&Ctrl;<keycap>Home</keycap></keycombo> does the same for the monitor that is activated. (Select the <guilabel>Project Monitor</guilabel> if it is not selected yet before using the shortcut.)
</para>
<para>
<screenshot>
<screeninfo></screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="Kdenlive_Quickstart-Resize-Marker.png" format="PNG"/>
<imagedata fileref="kdenlive_quickstart-resize-marker.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Resize marker</phrase>
@@ -165,14 +186,16 @@
<para>Resize marker</para>
</caption>
</mediaobject>
</screenshot></para>
<para>Since after eating comes playing, there is a Billard clip. Add it to the timeline as well. The first 1.5 seconds nothing happens in the clip, so it should perhaps be <guilabel>cut</guilabel> to avoid the video becoming boring. An easy way<footnote><para>Writing it this way suggests that there are several ways of cutting a clip. This is in fact true.</para></footnote> for this is to move the timeline cursor to the desired position (&ie; the position where you want to cut the video), then drag the left border of the clip when the resize marker appears. It will snap in at the timeline cursor when you move close enough.</para>
</screenshot>
</para>
<para>Since after eating comes playing, there is a Billiards clip. Add it to the timeline as well. For the first 1.5 seconds nothing happens in the clip, so it should perhaps be <guilabel>cut</guilabel> to avoid the video becoming boring. An easy way<footnote><para>Writing it this way suggests that there are several ways of cutting a clip. This is in fact true.</para></footnote> for this is to move the timeline cursor to the desired position (&ie; the position where you want to cut the video), then drag the left border of the clip when the resize marker appears. It will snap in at the timeline cursor when you move close enough.
</para>
<para>
<screenshot>
<screeninfo></screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="Kdenlive_Quickstart-Overlap-Clips.png" format="PNG"/>
<imagedata fileref="kdenlive_quickstart-overlap-clips.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Overlapping clips</phrase>
@@ -181,15 +204,18 @@
<para>Overlapping clips</para>
</caption>
</mediaobject>
</screenshot></para>
<para>To add a <emphasis>transition</emphasis> between eating (the Spoon) and playing billard, the two clips need to overlap. To be precise: the second clip should be above or below the first one and end some frames after the second one begins. Zooming in until the ticks for simple frames appear helps there; it also makes it easy to always have the same transition duration, like five frames in this case.</para>
<para>You can zoom in by either using the <guilabel>zoom slider</guilabel> at the bottom of the <application>Kdenlive</application> window, or with <keycombo>&Ctrl;<keycap>Mousewheel</keycap></keycombo>. <application>Kdenlive</application> will zoom to the timeline cursor, so first set it to the position which you want to see enlarged, then zoom in.</para>
</screenshot>
</para>
<para>To add a <emphasis>transition</emphasis> between eating (the Spoon) and playing billiards, the two clips need to overlap. To be precise: the second clip should be above or below the first one and end some frames after the second one begins. Zooming in until the ticks for single frames appear helps here; it also makes it easy to always have the same transition duration, five frames in this case.
</para>
<para>You can zoom in by either using the <guilabel>zoom slider</guilabel> at the bottom of the &kdenlive; window, or with <keycombo>&Ctrl;<keycap>Mousewheel</keycap></keycombo>. &kdenlive; will zoom to the timeline cursor, so first set it to the position which you want to see enlarged, then zoom in.
</para>
<para>
<screenshot>
<screeninfo></screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="Kdenlive-Quickstart-Add-Transition.png" format="PNG"/>
<imagedata fileref="kdenlive-quickstart-add-transition.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Transition marker</phrase>
@@ -198,64 +224,67 @@
<para>Transition marker</para>
</caption>
</mediaobject>
</screenshot></para>
<para>Now that the clips overlap, the transition can be added. This is done either by right-clicking on the upper clip and choosing <guilabel>Add Transition</guilabel> or, easier, by clicking the lower right corner of the Spoon clip. The latter by default adds a dissolve transition, which is in this case the best idea anyway since the Spoon is not required for playing anyway.</para>
<para>The dissolve transitions fades the first clip into the second one.</para>
</screenshot>
</para>
<para>Now that the clips overlap, the transition can be added. This is done either by right-clicking on the upper clip and choosing <guilabel>Add Transition</guilabel> or, easier, by clicking the green triangle that appears when you hover the mouse over the lower right corner of the Spoon clip. The latter, by default, adds a dissolve transition, which is in this case the best idea anyway since the Spoon is not required for playing.
</para>
<para>The dissolve transitions fades the first clip into the second one. See also <ulink url="http://userbase.kde.org/Special:myLanguage/Kdenlive/Manual/Transitions">Transition section of the manual</ulink>.
</para>
<para>
<screenshot>
<screeninfo></screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="Kdenlive-Quickstart-Add-Last-Clip.png" format="PNG"/>
<imagedata fileref="kdenlive-quickstart-add-last-clip.png" format="PNG"/>
</imageobject>
<textobject>
<phrase></phrase>
</textobject>
<caption>
<para></para>
</caption>
</mediaobject>
</screenshot></para>
<para>Lets add the last clip, the Piano, now, and again apply a dissolve transition. When adding it on the first track of the timeline, you need to click on the new clips lower left edge to add the transition to the previous clip.</para>
<sect1 id="effects"><title>Effects</title>
</screenshot>
</para>
<para>Lets now add the last clip, the Piano, and again apply a dissolve transition. When adding it on the first track of the timeline, you need to click on the new clips lower left edge to add the transition to the previous clip.
</para>
<sect2 id="effects"><title>Effects</title>
<para>
<screenshot>
<screeninfo></screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="Kdenlive_Quickstart-Add-Effect.png" format="PNG"/>
<imagedata fileref="kdenlive_quickstart-add-effect.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Effects</phrase>
<phrase>Effect List</phrase>
</textobject>
<caption>
<para>Effects</para>
<para>Effect List</para>
</caption>
</mediaobject>
</screenshot></para>
<para>The Piano can be colourized by adding an <emphasis>effect</emphasis> to it. Select the piano clip, then double-click the <guilabel>RGB Adjustment</guilabel> effect in the <guilabel>Effects</guilabel>. If it is not visible, you can get it via <menuchoice><guimenu>View</guimenu><guimenuitem>Effects</guimenuitem></menuchoice>.</para>
</screenshot>
</para>
<para>The Piano can be colourized by adding an <emphasis>effect</emphasis> to it. Select the piano clip, then double-click the <guilabel>RGB Adjustment</guilabel> effect in the <guilabel>Effect List</guilabel>. If it is not visible, you can get it via <menuchoice><guimenu>View</guimenu><guimenuitem>Effect List</guimenuitem></menuchoice>.
</para>
<para>
<screenshot>
<screeninfo></screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="Kdenlive_Quickstart-Effect-Flag.png" format="PNG"/>
<imagedata fileref="kdenlive_quickstart-effect-flag.png" format="PNG"/>
</imageobject>
<textobject>
<phrase></phrase>
</textobject>
<caption>
<para></para>
</caption>
</mediaobject>
</screenshot></para>
<para>Once the effect has been added, its name will be added to the timeline clip. It will also be shown in the <guilabel>Effect Stack</guilabel> widget.</para>
</screenshot>
</para>
<para>Once the effect has been added, its name will be added to the timeline clip. It will also be shown in the <guilabel>Effect Stack</guilabel> widget.
</para>
<para>
<screenshot>
<screeninfo></screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="Kdenlive-Quickstart-EffectStack.png" format="PNG"/>
<imagedata fileref="kdenlive-quickstart-effectstack.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Effect Stack with RGB adjustment</phrase>
@@ -264,17 +293,22 @@
<para>Effect Stack with RGB adjustment</para>
</caption>
</mediaobject>
</screenshot></para>
<para>To get a warm yellow-orange tone on the image, fitting the comfortable evening, blue needs to be reduced and red and green improved.</para>
<para>The values in the effect stack widget can be changed by using the slider (middle mouse button resets it to the default value), or by entering a value directly by double-clicking the number right to the slider.</para>
<para>Effects can also be added with the <guilabel>Add new effect</guilabel> icon (framed in the image on the left) in the <guilabel>Effect Stack</guilabel>; It always refers to the timeline clip that is currently selected. By unchecking the checkbox they are temporarily disabled (the settings remain though), this is &eg; useful for effects that require a lot of computing power, so they can be disabled when editing and enabled again for rendering.</para>
<para>For some effects, like the one used there, it is possible to add keyframes. The framed watch icon indicates this. Keyframes are used for changing effect parameters over time. In our clip this allows us to fade the pianos colour from a warm evening colour to a cold night colour.</para>
</screenshot>
</para>
<para>To get a warm yellow-orange tone on the image, fitting the comfortable evening, blue needs to be reduced and red and green improved.
</para>
<para>The values in the effect stack widget can be changed by using the slider (middle mouse button resets it to the default value), or by entering a value directly by double-clicking the number to the right of the slider.
</para>
<para>Effects can also be added with the <guilabel>Add new effect</guilabel> icon (framed in the image on the left) in the <guilabel>Effect Stack</guilabel>; It always refers to the timeline clip that is currently selected. By unchecking the checkbox they are temporarily disabled (the settings remain though), this is &eg; useful for effects that require a lot of computing power, so they can be disabled when editing and enabled again for rendering.
</para>
<para>For some effects, like the one used there, it is possible to add keyframes. The framed watch icon indicates this. Keyframes are used for changing effect parameters over time. In our clip this allows us to fade the pianos colour from a warm evening colour to a cold night colour.
</para>
<para>
<screenshot>
<screeninfo></screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="Kdenlive_Quickstart-Keyframes.png" format="PNG"/>
<imagedata fileref="kdenlive_quickstart-keyframes.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Keyframes for effects</phrase>
@@ -283,19 +317,26 @@
<para>Keyframes for effects</para>
</caption>
</mediaobject>
</screenshot></para>
<para>After clicking the <guilabel>keyframe</guilabel> icon (the clock icon framed in the previous image), the Effect Stack widget will re-arrange. By default there will be two keyframes, one at the beginning of the timeline clip and one at the end. Move the timeline cursor to the end of the timeline clip, such that the project monitor actually shows the new colours when changing the parameters of the keyframe at the end.</para>
<para>Make sure the last keyframe is selected in the Effect Stacks list. Then you are ready to flood the piano with a deep blue.</para>
<para>Moving the timeline cursor to the beginning of the project and playing it (with <keycap>Space</keycap>, or the <guilabel>Play</guilabel> button in the <guilabel>Project Monitor</guilabel>), the piano should now change the colour as desired.</para>
<para>Keyframing was the hardest part of this tutorial. If you managed to do it, you will master <guilabel>Kdenlive</guilabel> easily!</para>
</sect1>
<sect1 id="music"><title>Music</title>
</screenshot>
</para>
<para>After clicking the <guilabel>keyframe</guilabel> icon (the clock icon framed in the previous image), the Effect Stack widget will re-arrange. By default there will be two keyframes, one at the beginning of the timeline clip and one at the end. Move the timeline cursor to the end of the timeline clip, such that the project monitor actually shows the new colours when changing the parameters of the keyframe at the end.
</para>
<para>Make sure the last keyframe is selected in the Effect Stacks list. Then you are ready to flood the piano with a deep blue.
</para>
<para>Moving the timeline cursor to the beginning of the project and playing it (with <keycap>Space</keycap>, or the <guilabel>Play</guilabel> button in the <guilabel>Project Monitor</guilabel>), the piano should now change the colour as desired.
</para>
<para>Keyframing was the hardest part of this tutorial. If you managed to do it, you will master &kdenlive; easily!
</para>
<para>See also <link linkend="effects">Effects section of the manual</link>.
</para>
</sect2>
<sect2 id="music"><title>Music</title>
<para>
<screenshot>
<screeninfo></screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="Kdenlive_Quickstart-Fadeout.png" format="PNG"/>
<imagedata fileref="kdenlive_quickstart-fadeout.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Audio fadeout</phrase>
@@ -304,18 +345,21 @@
<para>Audio fadeout</para>
</caption>
</mediaobject>
</screenshot></para>
<para>Since the clips do not provide any audio, lets search for some nice piece of music, on your local collection or on web pages like <ulink url="http://www.jamendo.com">Jamendo</ulink>. The audio clip should, after adding it, go to an audio track on the timeline.</para>
<para>The audio clip can be resized on the timeline the same way as video clips are. The cursor will snap in at the end of the project automatically. To add a fade out effect at the end of the audio clip (except if you found a file with exactly the right length) you can hover the top right (or left) edge of the timeline clip and drag the green disc to the position where fading out should start.<footnote><para>This green disc is a shorthand for adding the effect <menuchoice><guimenu>Fade</guimenu><guimenuitem>Fade out</guimenuitem></menuchoice>. Both ways lead to the same result.</para></footnote></para>
</screenshot>
</para>
<para>Since the clips do not provide any audio, lets search for some nice piece of music, from your local collection or on web pages like <ulink url="http://www.jamendo.com">Jamendo</ulink>. The audio clip should, after adding it, be dragged to an audio track on the timeline.
</para>
<para>The audio clip can be resized on the timeline the same way as video clips are. The cursor will snap in at the end of the project automatically. To add a fade out effect at the end of the audio clip (except if you found a file with exactly the right length) you can hover the top right (or left) edge of the timeline clip and drag the green disc to the position where fading out should start.<footnote><para>This green disc is a shorthand for adding the effect <menuchoice><guimenu>Fade</guimenu><guimenuitem>Fade out</guimenuitem></menuchoice>. Both ways lead to the same result.</para></footnote>
</para>
</sect2>
</sect1>
</chapter>
<chapter id="rendering"><title>Rendering</title>
<sect1 id="rendering"><title>Rendering</title>
<para>
<screenshot>
<screeninfo></screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="Kdenlive_Quickstart-Renderer.png" format="PNG"/>
<imagedata fileref="kdenlive_quickstart-renderer.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Rendering dialog</phrase>
@@ -324,14 +368,16 @@
<para>Rendering dialog</para>
</caption>
</mediaobject>
</screenshot></para>
<para>A few minutes left, and the project is finished! Click the Render button (or go to <menuchoice><guimenu>Project</guimenu><guimenuitem>Render</guimenuitem></menuchoice>, or press <keycombo>&Ctrl;&Enter;</keycombo>) to get the dialog shown on the left. Select the desired output file for our new video with all effects and transitions, choose MPEG4 (works nearly everywhere) and a bitrate of 2000k (the higher the bitrate, the larger the output file and the better the quality but since the bitrate for the input clips was 2000k already, using a higher one would not improve quality and is therefore unnecessary), and press the <emphasis>Render to File</emphasis> button.</para>
</screenshot>
</para>
<para>A few minutes left, and the project is finished! Click the Render button (or go to <menuchoice><guimenu>Project</guimenu><guimenuitem>Render</guimenuitem></menuchoice>, or press <keycombo>&Ctrl;&Enter;</keycombo>) to get the dialog shown on the left. Select the desired output file for our new video with all effects and transitions, choose MPEG4 (works nearly everywhere) and a bitrate of 2000k (the higher the bitrate, the larger the output file and the better the quality but since the bitrate for the input clips was 2000k already, using a higher one would not improve quality and is therefore unnecessary), and press the <guilabel>Render to File</guilabel> button.
</para>
<para>
<screenshot>
<screeninfo></screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="Kdenlive_Quickstart-Rendering.png" format="PNG"/>
<imagedata fileref="kdenlive_quickstart-rendering.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Rendering progress</phrase>
@@ -340,8 +386,31 @@
<para>Rendering progress</para>
</caption>
</mediaobject>
</screenshot></para>
<para>After some seconds rendering will be finished, and your first <application>Kdenlive</application> project completed. Congratulations!</para>
</screenshot>
</para>
<para>After some seconds rendering will be finished, and your first &kdenlive; project completed. Congratulations!
</para>
<screenshot>
<screeninfo></screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="kdenlive_quickstart-rendering.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Rendering progress</phrase>
</textobject>
<caption>
<para>Rendering progress</para>
</caption>
</mediaobject>
</screenshot>
</sect1>
<sect1>
<title>Complete manual</title>
<para>Further documentation for the current version of &kdenlive; can be found in <ulink url="http://userbase.kde.org/Special:myLanguage/Kdenlive/Manual">the full manual</ulink>.
</para>
</sect1>
</chapter>
<!--userbase-content-->

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

1
kdenlive.categories Normal file
View File

@@ -0,0 +1 @@
org.kde.multimedia.kdenlive kdenlive (kdenlive)

View File

@@ -0,0 +1,487 @@
#!/bin/bash
# Halt on errors
set -e
# Be verbose
set -x
# Now we are inside CentOS 6
grep -r "CentOS release 6" /etc/redhat-release || exit 1
CPU_CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
if [[ $CPU_CORES -gt 1 ]]; then
CPU_CORES=$((CPU_CORES-1))
fi
echo "CPU Cores to use : $CPU_CORES"
# Determine which architecture should be built
if [[ "$(arch)" = "i686" || "$(arch)" = "x86_64" ]] ; then
ARCH=$(arch)
else
echo "Architecture could not be determined"
exit 1
fi
if [[ ! -f /etc/yum.repos.d/epel.repo ]] ; then
yum -y install epel-release
# we need to be up to date in order to install the xcb-keysyms dependency
yum -y update
fi
# Required for GAVL install (used in frei0r crop,scale,tilt effect)
if [[ ! -f /etc/yum.repos.d/linuxtech.repo ]] ; then
cat > /etc/yum.repos.d/linuxtech.repo << 'EOF'
[linuxtech]
name=LinuxTECH
baseurl=http://pkgrepo.linuxtech.net/el6/release/
enabled=1
gpgcheck=1
gpgkey=http://pkgrepo.linuxtech.net/el6/release/RPM-GPG-KEY-LinuxTECH.NET
EOF
yum -y update
fi
# gettext
# Packages for base dependencies and Qt5.
yum -y install wget \
tar \
bzip2 \
xz \
subversion \
libtool \
which \
fuse \
automake \
mesa-libEGL \
cmake3 \
gcc-c++ \
patch \
libxcb \
xcb-util \
xkeyboard-config \
gperf \
bison \
flex \
zlib-devel \
expat-devel \
fuse-devel \
libtool-ltdl-devel \
glib2-devel \
glibc-headers \
mysql-devel \
eigen3-devel \
openssl-devel \
cppunit-devel \
libstdc++-devel \
freetype-devel \
fontconfig-devel \
libxml2-devel \
libstdc++-devel \
libXrender-devel \
lcms2-devel \
xcb-util-keysyms-devel \
libXi-devel \
mesa-libGL-devel \
mesa-libGLU-devel \
libxcb-devel \
xcb-util-devel \
glibc-devel \
libudev-devel \
libicu-devel \
sqlite-devel \
libusb-devel \
libexif-devel \
libical-devel \
libxslt-devel \
xz-devel \
lz4-devel \
inotify-tools-devel \
cups-devel \
openal-soft-devel \
pixman-devel \
polkit-devel \
perl-ExtUtils-MakeMaker \
curl-devel \
pulseaudio-libs-devel \
libgavl-devel \
sox-devel \
fftw-devel \
perl-List-MoreUtils \
perl-XML-Parser \
jack-audio-connection-kit-devel \
ladspa-devel
if ( !test -d /usr/bin/cmake ) ; then
ln -s /usr/bin/cmake3 /usr/bin/cmake
fi
# Newer compiler than what comes with offcial CentOS 6 (only 64 bits)
yum -y install centos-release-scl-rh
yum -y install devtoolset-3-gcc devtoolset-3-gcc-c++
# required for Kdenlive related libs
yum -y install libXft-devel atk-devel libXcomposite-devel
# Get helper functions
wget -q https://github.com/probonopd/AppImages/raw/master/functions.sh -O ./functions.sh
. ./functions.sh
rm -f functions.sh
echo -e "---------- Clean-up Old Packages\n"
# Remove system based devel package to prevent conflict with new one.
yum -y erase boost-devel libgphoto2 sane-backends libjpeg-devel jasper-devel libpng-devel libtiff-devel git
# Prepare the install location
# rm -rf /app/ || true
mkdir -p /app/usr
mkdir -p /external/build
mkdir -p /external/download
export LLVM_ROOT=/opt/llvm/
# make sure lib and lib64 are the same thing
mkdir -p /app/usr/lib
cd /app/usr
rm -Rf lib64
ln -s lib lib64
QTVERSION=5.9.4
QVERSION_SHORT=5.9
QTDIR=/usr/local/Qt-${QTVERSION}/
# Use the new compiler
. /opt/rh/devtoolset-3/enable
BUILDING_DIR="/external/build"
DOWNLOAD_DIR="/external/download"
# install recent git
if [ ! -d /external/git-2.7.4 ]; then
cd /external
wget https://www.kernel.org/pub/software/scm/git/git-2.7.4.tar.gz
tar xzf git-2.7.4.tar.gz
fi
cd /external/git-2.7.4
make prefix=/usr/local/git all
make prefix=/usr/local/git install
echo 'export PATH=$PATH:/usr/local/git/bin' >> /etc/bashrc
source /etc/bashrc
cd $BUILDING_DIR
rm -rf $BUILDING_DIR/* || true
cmake3 /kdenlive/packaging/appimage/3rdparty \
-DCMAKE_INSTALL_PREFIX:PATH=/usr \
-DINSTALL_ROOT=/usr \
-DEXTERNALS_DOWNLOAD_DIR=$DOWNLOAD_DIR
cmake3 --build . --config RelWithDebInfo --target ext_jpeg -- -j$CPU_CORES
cmake3 --build . --config RelWithDebInfo --target ext_jasper -- -j$CPU_CORES
cmake3 --build . --config RelWithDebInfo --target ext_png -- -j$CPU_CORES
cmake3 --build . --config RelWithDebInfo --target ext_tiff -- -j$CPU_CORES
#cmake3 --build . --config RelWithDebInfo --target ext_opencv -- -j$CPU_CORES
cmake3 --build . --config RelWithDebInfo --target ext_qt -- -j$CPU_CORES
cmake3 --build . --config RelWithDebInfo --target ext_exiv2 -- -j$CPU_CORES
#gettext
cd /external
if ( test -d /external/gettext-0.18.3 )
then
echo "gettext already downloaded"
else
wget http://ftp.gnu.org/pub/gnu/gettext/gettext-0.18.3.tar.gz
tar -xf gettext-0.18.3.tar.gz
fi
cd gettext-0.18.3
./configure --prefix=/usr
make -j5
make install
#necessary ?
#pulseaudio-libs
# qjsonparser, used to add metadata to the plugins needs to work in a en_US.UTF-8 environment. That's
# not always set correctly in CentOS 6.7
export LC_ALL=en_US.UTF-8
export LANG=en_us.UTF-8
# Make sure we build from the /, parts of this script depends on that. We also need to run as root...
cd /
# TO-DO ask about this.
export CMAKE_PREFIX_PATH=$QTDIR:/app/share/llvm/
#update cmake https://xinyustudio.wordpress.com/2014/06/18/how-to-install-cmake-3-0-on-centos-6-centos-7/
#export PATH=/usr/local/cmake-3.0.0/bin:$PATH
# if the library path doesn't point to our usr/lib, linking will be broken and we won't find all deps either
export LD_LIBRARY_PATH=/usr/lib64/:/usr/lib:/app/usr/lib:$QTDIR/lib/:/opt/python3.5/lib/:$LD_LIBRARY_PATH
# start building the deps
function build_external
{ (
# errors fatal
echo "Compiler version:" $(g++ --version)
set -e
SRC=/external
BUILD=/external/build
PREFIX=/app/usr/
# framework
EXTERNAL=$1
# clone if not there
mkdir -p $SRC
cd $SRC
if ( test -d $EXTERNAL )
then
echo "$EXTERNAL already cloned"
cd $EXTERNAL
git reset --hard
git pull --rebase
cd ..
else
git clone $EXTERNAL_ADDRESS
fi
# create build dir
mkdir -p $BUILD/$EXTERNAL
# go there
cd $BUILD/$EXTERNAL
# cmake it
if ( $EXTERNAL_CMAKE )
then
cmake3 -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX $2 $SRC/$EXTERNAL
else
$EXTERNAL_CONFIGURE
fi
# make
make -j8
# install
make install
) }
export WLD=/app/usr/ # change this to another location if you prefer
export LD_LIBRARY_PATH=$WLD/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=$WLD/lib/pkgconfig/:$WLD/share/pkgconfig/:/usr/lib/pkgconfig/:$PKG_CONFIG_PATH
export PATH=$WLD/bin:$PATH
export ACLOCAL_PATH=$WLD/share/aclocal
export ACLOCAL="aclocal -I $ACLOCAL_PATH"
#yasm
IN=yasm,https://github.com/yasm/yasm.git,true,""
IFS=',' read -a external_options <<< $IN
EXTERNAL="${external_options[0]}"
EXTERNAL_ADDRESS="${external_options[1]}"
EXTERNAL_CMAKE="${external_options[2]}"
EXTERNAL_CONFIGURE="${external_options[3]}"
build_external $EXTERNAL
#nasm
cd /external
if ( test -d /external/nasm-2.13.02 )
then
echo "nasm already downloaded"
else
wget http://www.nasm.us/pub/nasm/releasebuilds/2.13.02/nasm-2.13.02.tar.xz
tar -xf nasm-2.13.02.tar.xz
fi
cd nasm-2.13.02
./configure --prefix=$WLD
make -j5
make install
#libsndfile
cd /external
if ( test -d /external/libsndfile-1.0.28 )
then
echo "libsndfile already downloaded"
else
wget http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.28.tar.gz
tar -xf libsndfile-1.0.28.tar.gz
fi
cd libsndfile-1.0.28
./configure --prefix=$WLD
make -j5
make install
#libsamplerate
cd /external
if ( test -d /external/libsamplerate-0.1.9 )
then
echo "libsamplerate already downloaded"
else
wget http://www.mega-nerd.com/SRC/libsamplerate-0.1.9.tar.gz
tar -xf libsamplerate-0.1.9.tar.gz
fi
cd libsamplerate-0.1.9
./configure --prefix=$WLD
make -j5
make install
#alsa-lib
cd /external
if ( test -d /external/alsa-lib-1.1.5 )
then
echo "alsa-lib already downloaded"
else
wget ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.1.5.tar.bz2
tar -xf alsa-lib-1.1.5.tar.bz2
fi
cd alsa-lib-1.1.5
./configure --prefix=$WLD
make -j5
make install
#sdl
cd /external
if ( test -d /external/SDL2-2.0.7 )
then
echo "SDL already downloaded"
else
wget http://libsdl.org/release/SDL2-2.0.7.tar.gz
tar -xf SDL2-2.0.7.tar.gz
fi
cd /external/SDL2-2.0.7
./configure --prefix=$WLD --with-alsa-prefix=/app/usr/lib --with-alsa-inc-prefix=/app/usr/include/
make
make install
function build_framework
{ (
# errors fatal
echo "Compiler version:" $(g++ --version)
set -e
SRC=/kf5
BUILD=/kf5/build
PREFIX=/app/usr/
# framework
FRAMEWORK=$1
# clone if not there
mkdir -p $SRC
cd $SRC
if ( test -d $FRAMEWORK )
then
echo "$FRAMEWORK already cloned"
cd $FRAMEWORK
if [ "$FRAMEWORK" = "polkit-qt-1" ] || [ "$FRAMEWORK" = "breeze" ] || [ "$FRAMEWORK" = "kdecoration" ]; then
git checkout .
git checkout master
git reset --hard
git pull --rebase
elif [ "$FRAMEWORK" = "knotifications" ]; then
git checkout .
git checkout master
git fetch --tags
git checkout v5.45.0
else
git fetch --tags
git checkout v5.45.0
fi
#git checkout master
#git reset --hard
#git pull --rebase
cd ..
else
git clone git://anongit.kde.org/$FRAMEWORK
cd $FRAMEWORK
if [ "$FRAMEWORK" = "polkit-qt-1" ] || [ "$FRAMEWORK" = "breeze" ] || [ "$FRAMEWORK" = "kdecoration" ]; then
git checkout master
git reset --hard
git pull --rebase
elif [ "$FRAMEWORK" = "knotifications" ]; then
git reset --hard
git fetch --tags
git checkout v5.45.0
else
git fetch --tags
git checkout v5.45.0
fi
cd ..
fi
if [ "$FRAMEWORK" = "knotifications" ]; then
cd $FRAMEWORK
echo "patching knotifications"
cat > no_phonon.patch << EOF
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0104c73..de44e9a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -59,11 +59,11 @@ find_package(KF5Config ${KF5_DEP_VERSION} REQUIRED)
find_package(KF5Codecs ${KF5_DEP_VERSION} REQUIRED)
find_package(KF5CoreAddons ${KF5_DEP_VERSION} REQUIRED)
-find_package(Phonon4Qt5 4.6.60 REQUIRED NO_MODULE)
-set_package_properties(Phonon4Qt5 PROPERTIES
- DESCRIPTION "Qt-based audio library"
- TYPE REQUIRED
- PURPOSE "Required to build audio notification support")
+#find_package(Phonon4Qt5 4.6.60 REQUIRED NO_MODULE)
+#set_package_properties(Phonon4Qt5 PROPERTIES
+# DESCRIPTION "Qt-based audio library"
+# TYPE REQUIRED
+# PURPOSE "Required to build audio notification support")
if (Phonon4Qt5_FOUND)
add_definitions(-DHAVE_PHONON4QT5)
endif()
EOF
cat no_phonon.patch |patch -p1
cd ..
fi
# create build dir
mkdir -p $BUILD/$FRAMEWORK
# go there
cd $BUILD/$FRAMEWORK
# cmake it
cmake3 -DBUILD_TESTING:BOOL=OFF -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX $2 $SRC/$FRAMEWORK > /tmp/$FRAMEWORK.log
# make
make -j8
# install
make install
) }
#TO-DO script these extras
build_framework extra-cmake-modules "-DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON"
#Cmake is too old on centos6.... so does this mean no sound for KDE apps? blech.
#build_framework phonon -DPHONON_BUILD_PHONON4QT5=ON
for FRAMEWORK in karchive kconfig kwidgetsaddons kcompletion kcoreaddons polkit-qt-1 kauth kcodecs ki18n kdoctools kguiaddons kconfigwidgets kwindowsystem kcrash kdbusaddons kitemviews kiconthemes kjobwidgets kservice solid sonnet ktextwidgets attica kglobalaccel kxmlgui kbookmarks knotifications kio knotifyconfig knewstuff kpackage kdeclarative ; do
build_framework $FRAMEWORK "-DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON"
done
build_framework breeze-icons "-DBINARY_ICONS_RESOURCE=1 -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON"
build_framework kdecoration "-DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON"
build_framework breeze "-DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON"
cd ..
echo "+++++++++++++\n BUILDING FRAMEWORKS DONE \n+++++++++++++++"

409
packaging/appimage/02-avlibs.sh Executable file
View File

@@ -0,0 +1,409 @@
#!/bin/bash
# Halt on errors
set -e
# Be verbose
set -x
# Now we are inside CentOS 6
grep -r "CentOS release 6" /etc/redhat-release || exit 1
. /opt/rh/devtoolset-3/enable
#necessary ?
#pulseaudio-libs
QTVERSION=5.9.4
QVERSION_SHORT=5.9
QTDIR=/usr/local/Qt-${QTVERSION}/
# qjsonparser, used to add metadata to the plugins needs to work in a en_US.UTF-8 environment. That's
# not always set correctly in CentOS 6.7
export LC_ALL=en_US.UTF-8
export LANG=en_us.UTF-8
# Determine which architecture should be built
if [[ "$(arch)" = "i686" || "$(arch)" = "x86_64" ]] ; then
ARCH=$(arch)
else
echo "Architecture could not be determined"
exit 1
fi
# Make sure we build from the /, parts of this script depends on that. We also need to run as root...
cd /
# TO-DO ask about this.
export CMAKE_PREFIX_PATH=$QTDIR:/app/share/llvm/
# if the library path doesn't point to our usr/lib, linking will be broken and we won't find all deps either
export LD_LIBRARY_PATH=/usr/lib64/:/usr/lib:/app/usr/lib:$QTDIR/lib/:/opt/python3.5/lib/:$LD_LIBRARY_PATH
#export LD_LIBRARY_PATH=/usr/lib64/:/usr/lib:/app/usr/lib:$QTDIR/lib/:$LD_LIBRARY_PATH
# Prepare the install location
#rm -rf /app/ || true
mkdir -p /app/usr
# export LLVM_ROOT=/opt/llvm/
# start building the deps
function build_external
{ (
# errors fatal
echo "Compiler version:" $(g++ --version)
set -e
SRC=/external
BUILD=/external/build
PREFIX=/app/usr/
# framework
EXTERNAL=$1
# clone if not there
mkdir -p $SRC
cd $SRC
if ( test -d $EXTERNAL )
then
echo "$EXTERNAL already cloned"
if [ $# -eq 0 ]; then
cd $EXTERNAL
git reset --hard
git pull --rebase
cd ..
fi
else
git clone $EXTERNAL_ADDRESS
fi
# create build dir
mkdir -p $BUILD/$EXTERNAL
# go there
cd $BUILD/$EXTERNAL
# cmake it
if ( $EXTERNAL_CMAKE )
then
cmake3 -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX $2 $SRC/$EXTERNAL
else
$EXTERNAL_CONFIGURE
fi
make -j8
# install
make install
) }
export WLD=/app/usr/ # change this to another location if you prefer
export LD_LIBRARY_PATH=$WLD/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=$WLD/lib/pkgconfig/:$WLD/share/pkgconfig/:/usr/lib/pkgconfig/:$PKG_CONFIG_PATH
export PATH=$WLD/bin:$PATH
export ACLOCAL_PATH=$WLD/share/aclocal
export ACLOCAL="aclocal -I $ACLOCAL_PATH"
#libsndfile
cd /external
if ( test -d /external/libsndfile-1.0.28 )
then
echo "libsndfile already downloaded"
else
wget http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.28.tar.gz
tar -xf libsndfile-1.0.28.tar.gz
fi
cd libsndfile-1.0.28
./configure --prefix=$WLD
make -j5
make install
#libsamplerate
cd /external
if ( test -d /external/libsamplerate-0.1.9 )
then
echo "libsamplerate already downloaded"
else
wget http://www.mega-nerd.com/SRC/libsamplerate-0.1.9.tar.gz
tar -xf libsamplerate-0.1.9.tar.gz
fi
cd libsamplerate-0.1.9
./configure --prefix=$WLD
make -j5
make install
#ladspa-plugins (shw)
cd /external
if ( test -d /external/ladspa )
then
echo "ladspa already downloaded, on failure, replace AC_CONFIG_MACRO_DIRS([m4]) with AC_CONFIG_MACRO_DIR([m4])"
cd ladspa
git reset --hard
git pull --rebase
cd ..
else
git clone https://github.com/swh/ladspa.git
fi
cd ladspa
echo "Readying ladspa, on failure, replace AC_CONFIG_MACRO_DIRS([m4]) with AC_CONFIG_MACRO_DIR([m4]) in configure.ac"
autoreconf -i
./configure --prefix=$WLD
make -j5
make install
#alsa-lib
cd /external
if ( test -d /external/alsa-lib-1.1.5 )
then
echo "alsa-lib already downloaded"
else
wget ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.1.5.tar.bz2
tar -xf alsa-lib-1.1.5.tar.bz2
fi
cd alsa-lib-1.1.5
./configure --prefix=$WLD
make -j5
make install
#libx264
cd /external
if ( test -d /external/x264 )
then
echo "libx264 already cloned"
if [ $# -eq 0 ]; then
cd x264
git reset --hard
git pull --rebase
cd ..
fi
# make distclean
else
#git clone git://git.videolan.org/x264.git
git clone https://anonscm.debian.org/git/pkg-multimedia/x264.git
fi
cd x264
./configure --enable-static --enable-shared --prefix=$WLD
make -j5
make install
#libx265
cd /external
if ( test -d /external/x265 )
then
echo "libx265 already downloaded"
cd x265
if [ $# -eq 0 ]; then
git reset --hard
git pull --rebase
fi
cd build/linux
# make distclean
else
git clone https://anonscm.debian.org/git/pkg-multimedia/x265.git
cd x265/build/linux
fi
cmake3 -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$WLD" -DENABLE_PIC=ON -DENABLE_SHARED=OFF ../../source
make -j5
make install
#libvpx
cd /external
if ( test -d /external/libvpx )
then
echo "libvpx already cloned"
if [ $# -eq 0 ]; then
cd libvpx
git reset --hard
git pull --rebase
cd ..
fi
#make clean
else
git clone https://anonscm.debian.org/git/pkg-multimedia/libvpx.git
fi
cd libvpx
./configure --enable-static --as=yasm --enable-shared --prefix=$WLD
make -j5
make install
#ffmpeg
cd /external
if ( test -d /external/ffmpeg )
then
echo "ffmpeg already cloned"
if [ $# -eq 0 ]; then
cd ffmpeg
git reset --hard
# git pull --rebase
git checkout debian/7%3.3.4-2
cd ..
fi
else
# git clone https://git.ffmpeg.org/ffmpeg.git
# Use debian source
git clone https://anonscm.debian.org/git/pkg-multimedia/ffmpeg.git
fi
cd ffmpeg
./configure --prefix=$WLD --extra-ldflags="-L$WLD/lib -lstdc++ -lm -lrt -ldl" --extra-cflags="-I$WLD/include" --enable-shared --enable-avfilter --enable-gpl --enable-avresample --enable-libx265 --enable-libvpx --enable-libx264 --disable-doc
make -j5
make install
#opencv_contrib
# download manually (hash mismatch)
# https://github.com/opencv/opencv_3rdparty/tree/ippicv/master_20151201/ippicv
if ( test -d /external/cairo-1.14.10 )
then
echo "cairo already downloaded"
cd /external/cairo-1.14.10
else
cd /external
wget https://www.cairographics.org/releases/cairo-1.14.10.tar.xz
tar -xf cairo-1.14.10.tar.xz
cd /external/cairo-1.14.10
./autogen.sh
fi
./configure --prefix=$WLD
make -j5
make install
/bin/cp /app/usr/lib/pkgconfig/cairo* /usr/lib/pkgconfig/
if ( test -d /external/harfbuzz-0.9.10 )
then
echo "pango already downloaded"
cd /external/harfbuzz-0.9.10
else
cd /external
wget https://www.freedesktop.org/software/harfbuzz/release/harfbuzz-0.9.10.tar.bz2
tar -xf harfbuzz-0.9.10.tar.bz2
cd /external/harfbuzz-0.9.10
fi
./configure --prefix=$WLD
make -j5
make install
/bin/cp /app/usr/lib/pkgconfig/harf* /usr/lib/pkgconfig/
/bin/cp /app/usr/lib/libharfbuzz.* /usr/lib
if ( test -d /external/pango-1.28.4 )
then
echo "pango already downloaded"
cd /external/pango-1.28.4
else
cd /external
wget http://ftp.gnome.org/pub/GNOME/sources/pango/1.28/pango-1.28.4.tar.gz
tar -xf pango-1.28.4.tar.gz
cd /external/pango-1.28.4
fi
./configure --prefix=$WLD
make -j5
make install
/bin/cp /app/usr/lib/pkgconfig/pango* /usr/lib/pkgconfig/
if ( test -d /external/gdk-pixbuf-2.23.5 )
then
echo "gdk-pixbuf already downloaded"
cd /external/gdk-pixbuf-2.23.5
else
cd /external
wget http://ftp.gnome.org/pub/GNOME/sources/gdk-pixbuf/2.23/gdk-pixbuf-2.23.5.tar.xz
tar -xf gdk-pixbuf-2.23.5.tar.xz
cd /external/gdk-pixbuf-2.23.5
fi
./configure --prefix=$WLD
make -j5
make install
/bin/cp /app/usr/lib/pkgconfig/gdk* /usr/lib/pkgconfig/
if ( test -d /external/gtk+-2.23.90 )
then
echo "gtk2 already downloaded"
cd /external/gtk+-2.23.90
else
cd /external
wget http://ftp.gnome.org/pub/GNOME/sources/gtk+/2.23/gtk+-2.23.90.tar.gz
tar -xf gtk+-2.23.90.tar.gz
cd /external/gtk+-2.23.90
fi
./configure --prefix=$WLD
make -j5
make install
/bin/cp /app/usr/lib/pkgconfig/gtk* /usr/lib/pkgconfig/
/bin/cp /app/usr/lib/pkgconfig/gdk* /usr/lib/pkgconfig/
cd /external
if ( test -d /external/opencv_contrib )
then
echo "opencv_contrib already cloned"
if [ $# -eq 0 ]; then
cd opencv_contrib
git reset --hard
# git pull --rebase
git checkout 3.3.0
cd ..
fi
else
git clone https://github.com/opencv/opencv_contrib.git
fi
cd /external
if ( test -d /external/opencv )
then
echo "opencv already cloned"
if [ $# -eq 0 ]; then
cd opencv
git reset --hard
# git pull --rebase
git checkout 3.3.0
cd ..
fi
else
git clone https://github.com/opencv/opencv.git
fi
#opencv
IN=opencv,https://github.com/opencv/opencv.git,true,""
IFS=',' read -a external_options <<< $IN
EXTERNAL="${external_options[0]}"
EXTERNAL_ADDRESS="${external_options[1]}"
EXTERNAL_CMAKE="${external_options[2]}"
EXTERNAL_CMAKE_OPTIONS="-DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules -DBUILD_opencv_aruco=OFF -DBUILD_opencv_bgsegm=OFF -DBUILD_opencv_bioinspired=OFF -DBUILD_opencv_ccalib=OFF -DBUILD_opencv_cnn_3dobj=OFF -DBUILD_opencv_cvv=OFF -DBUILD_opencv_dnn=OFF -DBUILD_opencv_dnns_easily_fooled=OFF -DBUILD_opencv_dpm=OFF -DBUILD_opencv_fuzzy=OFF -DBUILD_opencv_hdf=OFF -DBUILD_opencv_line_descriptor=OFF -DBUILD_opencv_matlab=OFF -DBUILD_opencv_optflow=OFF -DBUILD_opencv_plot=ON -DBUILD_opencv_reg=OFF -DBUILD_opencv_rgbd=OFF -DBUILD_opencv_saliency=OFF -DBUILD_opencv_sfm=OFF -DBUILD_opencv_stereo=OFF -DBUILD_opencv_structured_light=OFF -DBUILD_opencv_surface_matching=OFF -DBUILD_opencv_xfeatures2d=OFF -DBUILD_opencv_xobjdetect=OFF -DBUILD_opencv_xphoto=OFF -DBUILD_opencv_calib3d=OFF -DBUILD_opencv_cudaarithm=OFF -DBUILD_opencv_cudabgsegm=OFF -DBUILD_opencv_cudacodec=OFF -DBUILD_opencv_cudafilters=OFF -DBUILD_opencv_cudalegacy=OFF -DBUILD_opencv_cudaobjdetect=OFF -DBUILD_opencv_cudaoptflow=OFF -DBUILD_opencv_cudastereo=OFF -DBUILD_opencv_cudawarping=OFF -DBUILD_opencv_cudev=OFF -DBUILD_opencv_java=OFF -DBUILD_opencv_shape=OFF -DBUILD_opencv_stitching=OFF -DBUILD_opencv_superres=OFF -DBUILD_opencv_ts=OFF -DBUILD_opencv_videoio=OFF -DBUILD_opencv_videostab=OFF -DBUILD_opencv_viz=OFF"
# create build dir
SRC=/external
BUILD=/external/build
PREFIX=/app/usr/
mkdir -p $BUILD/opencv
# go there
cd $BUILD/opencv
cmake3 -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX $EXTERNAL_CMAKE_OPTIONS $SRC/opencv
# make
make -j8
# install
make install
#EXTERNAL_CONFIGURE="${external_options[3]}"
#build_external $EXTERNAL $EXTERNAL_CMAKE_OPTIONS
#vidstab
IN=vid.stab,https://github.com/georgmartius/vid.stab.git,true,""
IFS=',' read -a external_options <<< $IN
EXTERNAL="${external_options[0]}"
EXTERNAL_ADDRESS="${external_options[1]}"
EXTERNAL_CMAKE="${external_options[2]}"
EXTERNAL_CONFIGURE="${external_options[3]}"
build_external $EXTERNAL
echo "/////////////////\nBUILDING AV LIBS DONE\n////////////////"

259
packaging/appimage/03-kdenlive.sh Executable file
View File

@@ -0,0 +1,259 @@
#!/bin/bash
# Halt on errors
set -e
# Be verbose
set -x
# Now we are inside CentOS 6
grep -r "CentOS release 6" /etc/redhat-release || exit 1
# Get helper functions
wget -q https://github.com/probonopd/AppImages/raw/master/functions.sh -O ./functions.sh
. ./functions.sh
rm -f functions.sh
. /opt/rh/devtoolset-3/enable
#necessary ?
#pulseaudio-libs
QTVERSION=5.9.4
QVERSION_SHORT=5.9
QTDIR=/usr/local/Qt-${QTVERSION}/
# qjsonparser, used to add metadata to the plugins needs to work in a en_US.UTF-8 environment. That's
# not always set correctly in CentOS 6.7
export LC_ALL=en_US.UTF-8
export LANG=en_us.UTF-8
# Determine which architecture should be built
if [[ "$(arch)" = "i686" || "$(arch)" = "x86_64" ]] ; then
ARCH=$(arch)
else
echo "Architecture could not be determined"
exit 1
fi
# Make sure we build from the /, parts of this script depends on that. We also need to run as root...
cd /
# TO-DO ask about this.
export CMAKE_PREFIX_PATH=$QTDIR:/app/share/llvm/
# if the library path doesn't point to our usr/lib, linking will be broken and we won't find all deps either
export LD_LIBRARY_PATH=/usr/lib64/:/usr/lib:/app/usr/lib:$QTDIR/lib/:/opt/python3.5/lib/:$LD_LIBRARY_PATH
#export LD_LIBRARY_PATH=/usr/lib64/:/usr/lib:/app/usr/lib:$QTDIR/lib/:$LD_LIBRARY_PATH
# Workaround for: On CentOS 6, .pc files in /usr/lib/pkgconfig are not recognized
# However, this is where .pc files get installed when bulding libraries... (FIXME)
# I found this by comparing the output of librevenge's "make install" command
# between Ubuntu and CentOS 6
#ln -sf /usr/share/pkgconfig /usr/lib/pkgconfig
#update ruby
yum -y remove ruby ruby-devel
if ( test -d /external/ruby-2.1.2 )
then
echo "RUBY already cloned"
else
cd /external
wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.2.tar.gz
tar xvfvz ruby-2.1.2.tar.gz
fi
cd /external/ruby-2.1.2
./configure
make
make install
gem update --system
# Get project
if [ ! -d /kdenlive ] ; then
git clone --depth 1 http://anongit.kde.org/kdenlive.git /kdenlive
cd /kdenlive/
# git checkout -b timeline2 origin/refactoring_timeline
else
cd /kdenlive/
if [ $# -eq 0 ]; then
git pull
fi
fi
cd /kdenlive/
#git_pull_rebase_helper
# Prepare the install location
#rm -rf /app/ || true
#mkdir -p /app/usr
# export LLVM_ROOT=/opt/llvm/
# make sure lib and lib64 are the same thing
mkdir -p /app/usr/lib
cd /app/usr
#ln -s lib lib64
# start building the deps
function build_external
{ (
# errors fatal
echo "Compiler version:" $(g++ --version)
set -e
SRC=/external
BUILD=/external/build
PREFIX=/app/usr/
# framework
EXTERNAL=$1
# clone if not there
mkdir -p $SRC
cd $SRC
if ( test -d $EXTERNAL )
then
echo "$EXTERNAL already cloned"
if [ $# -eq 0 ]; then
cd $EXTERNAL
git reset --hard
git pull --rebase
cd ..
fi
else
git clone $EXTERNAL_ADDRESS
fi
# create build dir
mkdir -p $BUILD/$EXTERNAL
# go there
cd $BUILD/$EXTERNAL
# cmake it
if ( $EXTERNAL_CMAKE )
then
cmake3 -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX $2 $SRC/$EXTERNAL
else
$EXTERNAL_CONFIGURE
fi
# make
make -j8
# install
make install
) }
export WLD=/app/usr/ # change this to another location if you prefer
export LD_LIBRARY_PATH=$WLD/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=$WLD/lib/pkgconfig/:$WLD/share/pkgconfig/:/usr/lib/pkgconfig/:$PKG_CONFIG_PATH
export PATH=$WLD/bin:$PATH
export ACLOCAL_PATH=$WLD/share/aclocal
export ACLOCAL="aclocal -I $ACLOCAL_PATH"
IN=frei0r,https://github.com/dyne/frei0r.git,true,""
IFS=',' read -a external_options <<< $IN
EXTERNAL="${external_options[0]}"
EXTERNAL_ADDRESS="${external_options[1]}"
EXTERNAL_CMAKE="${external_options[2]}"
EXTERNAL_CMAKE_OPTIONS="-DWITHOUT_OPENCV:BOOL=ON"
EXTERNAL_CONFIGURE="${external_options[3]}"
build_external $EXTERNAL $EXTERNAL_CMAKE_OPTIONS
#TODO: dependencies for MLT modules (xml, sdl, etc).
#movit - - Requires some adjustments to build with older automake
#cd /external
#if ( test -d /external/movit )
#then
# echo "movit already cloned"
#if [ $# -eq 0 ]; then
# cd movit
# git pull
# git reset --hard
# git pull --rebase
# cd ..
#fi
#else
# git clone https://git.sesse.net/movit
#fi
#cd movit
#./autogen.sh
#./configure --prefix=/app/usr
#make -j5
#make install
#mlt
cd /external
if ( test -d /external/mlt )
then
echo "mlt already cloned"
if [ $# -eq 0 ]; then
cd mlt
git reset --hard
git pull --rebase
#current git master incompatible (crashes Kdenlive on keyframes)
git checkout 15105c4
cd ..
fi
else
git clone https://github.com/mltframework/mlt.git
fi
cd mlt
# patch MLT
cat > mlt_fix.patch << 'EOF'
diff --git a/src/modules/vid.stab/configure b/src/modules/vid.stab/configure
index e501888..55f0307 100755
--- a/src/modules/vid.stab/configure
+++ b/src/modules/vid.stab/configure
@@ -19,7 +19,8 @@ then
exit 0
fi
- echo > config.mak
+ echo "CFLAGS += $(pkg-config --cflags vidstab)" > config.mak
+ echo "LDFLAGS += $(pkg-config --libs vidstab)" >> config.mak
case $targetos in
Darwin)
;;
EOF
cat mlt_fix.patch |patch -p1
export CXXFLAGS="-std=c++11"
./configure --enable-gpl --prefix=/app/usr --disable-rtaudio
make -j5
make install
# Build kdenlive
mkdir -p /kdenlive_build
mkdir -p /kdenlive_build/po
if [ ! -d /kdenlive/po ] ; then
ln -s /kdenlive_build/po /kdenlive/po
fi
cd /kdenlive_build
cmake3 ../kdenlive \
-DCMAKE_INSTALL_PREFIX:PATH=/app/usr/ \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DPACKAGERS_BUILD=1 \
-DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON \
-DKDE_L10N_AUTO_TRANSLATIONS:BOOL=ON \
-DBUILD_TESTS=FALSE
make -j8
make install
echo "++++++++++++++++++\nBUILD FINSHED \n+++++++++++++++++";
###############################################################
# Build complete, AppImage bundling begins here
###############################################################

View File

@@ -0,0 +1,346 @@
#!/bin/bash
# Halt on errors
set -e
# Be verbose
set -x
# Now we are inside CentOS 6
grep -r "CentOS release 6" /etc/redhat-release || exit 1
# Get helper functions
wget -q https://github.com/probonopd/AppImages/raw/master/functions.sh -O ./functions.sh
. ./functions.sh
rm -f functions.sh
. /opt/rh/devtoolset-3/enable
#necessary ?
#pulseaudio-libs
QTVERSION=5.9.1
QVERSION_SHORT=5.9
#QTDIR=/usr/local/Qt-${QTVERSION}/
QTDIR=/usr/
# qjsonparser, used to add metadata to the plugins needs to work in a en_US.UTF-8 environment. That's
# not always set correctly in CentOS 6.7
export LC_ALL=en_US.UTF-8
export LANG=en_us.UTF-8
# Determine which architecture should be built
if [[ "$(arch)" = "i686" || "$(arch)" = "x86_64" ]] ; then
ARCH=$(arch)
else
echo "Architecture could not be determined"
exit 1
fi
# Make sure we build from the /, parts of this script depends on that. We also need to run as root...
cd /
# TO-DO ask about this.
export CMAKE_PREFIX_PATH=$QTDIR:/app/share/llvm/
# if the library path doesn't point to our usr/lib, linking will be broken and we won't find all deps either
export LD_LIBRARY_PATH=/usr/lib64/:/usr/lib:/app/usr/lib:$QTDIR/lib/:/opt/python3.5/lib/:$LD_LIBRARY_PATH
#export LD_LIBRARY_PATH=/usr/lib64/:/usr/lib:/app/usr/lib:$QTDIR/lib/:$LD_LIBRARY_PATH
# Workaround for: On CentOS 6, .pc files in /usr/lib/pkgconfig are not recognized
# However, this is where .pc files get installed when bulding libraries... (FIXME)
# I found this by comparing the output of librevenge's "make install" command
# between Ubuntu and CentOS 6
#ln -sf /usr/share/pkgconfig /usr/lib/pkgconfig
export WLD=/app/usr/ # change this to another location if you prefer
export LD_LIBRARY_PATH=$WLD/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=$WLD/lib/pkgconfig/:$WLD/share/pkgconfig/:/usr/lib/pkgconfig/:$PKG_CONFIG_PATH
export PATH=$WLD/bin:$PATH
export ACLOCAL_PATH=$WLD/share/aclocal
export ACLOCAL="aclocal -I $ACLOCAL_PATH"
echo "++++++++++++++++++\nBUILD FINSHED \n+++++++++++++++++";
###############################################################
# Build complete, AppImage bundling begins here
###############################################################
cd /app
# FIXME: How to find out which subset of plugins is really needed? I used strace when running the binary
mkdir -p ./usr/lib/qt5/plugins/
PLUGINS=$(dirname $QTDIR/plugins/bearer)
/bin/cp -r $PLUGINS/{bearer,generic,imageformats,platforms,iconengines,platforminputcontexts,xcbglintegrations} ./usr/lib/qt5/plugins/
/bin/cp -r $PLUGINS/kf5 ./usr/lib/qt5/plugins/
/bin/cp -r $PLUGINS/mltpreview.so ./usr/lib/qt5/plugins/
mkdir -p ./usr/lib/qt5/plugins/styles/
/bin/cp -r /usr/plugins/styles/breeze.so ./usr/lib/qt5/plugins/styles/
/bin/cp -r /usr/plugins/kstyle_breeze_config.so ./usr/lib/qt5/plugins/
/bin/cp -r $QTDIR/qml ./usr/lib/qt5/
cp -ru /usr/share/mime/* /app/usr/share/mime
update-mime-database /app/usr/share/mime/
if ( test -d ./usr/lib/plugins )
then
mv ./usr/lib/plugins/* ./usr/lib/qt5/plugins/
fi
/bin/cp $(ldconfig -p | grep libsasl2.so.2 | cut -d ">" -f 2 | xargs) ./usr/lib/
/bin/cp $(ldconfig -p | grep libGL.so.1 | cut -d ">" -f 2 | xargs) ./usr/lib/ # otherwise segfaults!?
/bin/cp $(ldconfig -p | grep libGLU.so.1 | cut -d ">" -f 2 | xargs) ./usr/lib/ # otherwise segfaults!?
# Fedora 23 seemed to be missing SOMETHING from the Centos 6.7. The only message was:
# This application failed to start because it could not find or load the Qt platform plugin "xcb".
# Setting export QT_DEBUG_PLUGINS=1 revealed the cause.
# QLibraryPrivate::loadPlugin failed on "/usr/lib64/qt5/plugins/platforms/libqxcb.so" :
# "Cannot load library /usr/lib64/qt5/plugins/platforms/libqxcb.so: (/lib64/libEGL.so.1: undefined symbol: drmGetNodeTypeFromFd)"
# Which means that we have to copy libEGL.so.1 in too
# cp $(ldconfig -p | grep libEGL.so.1 | cut -d ">" -f 2 | xargs) ./usr/lib/ # Otherwise F23 cannot load the Qt platform plugin "xcb"
# let's not copy xcb itself, that breaks on dri3 systems https://bugs.kde.org/show_bug.cgi?id=360552
#cp $(ldconfig -p | grep libxcb.so.1 | cut -d ">" -f 2 | xargs) ./usr/lib/
/bin/cp $(ldconfig -p | grep libfreetype.so.6 | cut -d ">" -f 2 | xargs) ./usr/lib/ # For Fedora 20
# cp $(ldconfig -p | grep libfuse | cut -d ">" -f 2 | xargs) ./usr/lib/
#cp $(ldconfig -p | grep libselinux | cut -d ">" -f 2 | xargs) ./usr/lib/
ldd usr/bin/kdenlive | grep "=>" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ./usr/lib || true
ldd usr/bin/plugins/platforms/libqxcb.so | grep "=>" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ./usr/lib || true
# Copy in the indirect dependencies
FILES=$(find . -type f -executable)
for FILE in $FILES ; do
ldd "${FILE}" | grep "=>" | awk '{print $3}' | xargs -I '{}' cp -v '{}' usr/lib || true
done
cd usr/ ; find . -type f -exec sed -i -e 's|/usr/lib|././/lib|g' {} \; ; cd ..
#DEPS=""
#for FILE in $FILES ; do
# ldd "${FILE}" | grep "=>" | awk '{print $3}' | xargs -I '{}' echo '{}' > DEPSFILE
#done
#DEPS=$(cat DEPSFILE |sort | uniq)
#for FILE in $DEPS ; do
# if [ -f $FILE ] ; then
# echo $FILE
# cp --parents -rfL $FILE ./
# fi
#done
#rm -f DEPSFILE
copy_deps
if [ -d lib64 ] ; then
mv lib64/* usr/lib/
rm -rf lib64/
fi
# YESOK1
# The following are assumed to be part of the base system
rm -f usr/lib/libcom_err.so.2 || true
rm -f usr/lib/libcrypt.so.1 || true
rm -f usr/lib/libdl.so.2 || true
rm -f usr/lib/libexpat.so.1 || true
#rm -f usr/lib/libfontconfig.so.1 || true
rm -f usr/lib/libgcc_s.so.1 || true
rm -f usr/lib/libglib-2.0.so.0 || true
rm -f usr/lib/libgpg-error.so.0 || true
rm -f usr/lib/libgssapi_krb5.so.2 || true
rm -f usr/lib/libgssapi.so.3 || true
rm -f usr/lib/libhcrypto.so.4 || true
rm -f usr/lib/libheimbase.so.1 || true
rm -f usr/lib/libheimntlm.so.0 || true
rm -f usr/lib/libhx509.so.5 || true
rm -f usr/lib/libICE.so.6 || true
rm -f usr/lib/libidn.so.11 || true
rm -f usr/lib/libk5crypto.so.3 || true
rm -f usr/lib/libkeyutils.so.1 || true
rm -f usr/lib/libkrb5.so.26 || true
rm -f usr/lib/libkrb5.so.3 || true
rm -f usr/lib/libkrb5support.so.0 || true
# rm -f usr/lib/liblber-2.4.so.2 || true # needed for debian wheezy
# rm -f usr/lib/libldap_r-2.4.so.2 || true # needed for debian wheezy
rm -f usr/lib/libm.so.6 || true
rm -f usr/lib/libp11-kit.so.0 || true
rm -f usr/lib/libpcre.so.3 || true
rm -f usr/lib/libpthread.so.0 || true
rm -f usr/lib/libresolv.so.2 || true
rm -f usr/lib/libroken.so.18 || true
rm -f usr/lib/librt.so.1 || true
rm -f usr/lib/libsasl2.so.2 || true
rm -f usr/lib/libSM.so.6 || true
rm -f usr/lib/libusb-1.0.so.0 || true
rm -f usr/lib/libuuid.so.1 || true
rm -f usr/lib/libwind.so.0 || true
rm -f usr/lib/libfontconfig.so.* || true
# Remove these libraries, we need to use the system versions; this means 11.04 is not supported (12.04 is our baseline)
# rm -f usr/lib/libEGL.so.* || true
rm -f usr/lib/libxcb* || true
rm -f usr/lib/libGL.so.* || true
rm -f usr/lib/libdrm.so.* || true
rm -f usr/lib/libX11.so.* || true
#YESOK2
#mv usr/local/Qt-*/lib/* usr/lib
#rm -rf usr/local/
# mv ./opt/python3.5/lib/* usr/lib
# mv ./opt/llvm/lib/* usr/lib
#rm -rf ./opt/
rm -rf app/
#delete_blacklisted
BLACKLISTED_FILES=$(cat_file_from_url https://github.com/AppImage/AppImages/raw/master/excludelist | sed 's|#.*||g')
echo $BLACKLISTED_FILES
for FILE in $BLACKLISTED_FILES ;
do
if [[ $FILE == libpango* ]] || [[ $FILE == libgdk_pixbuf* ]] ;
then
echo "keeping libpango"
else
FILES="$(find . -name "${FILE}" -not -path "./usr/optional/*")"
for FOUND in $FILES ; do
rm -vf "$FOUND" "$(readlink -f "$FOUND")"
done
fi
done
# Do not bundle developer stuff
rm -rf usr/include || true
rm -rf usr/lib/cmake || true
rm -rf usr/lib/pkgconfig || true
find . -name '*.la' | xargs -i rm {}
rm -rf usr/share/ECM/ || true
rm -rf usr/share/gettext || true
rm -rf usr/share/pkgconfig || true
rm -rf rm -rf ./usr/mkspecs/ || true
# Remove
strip -g $(find usr) || true
if [ ! -z "$(ls -A usr/lib/libexec/kf5)" ]; then
/bin/cp -R usr/lib/libexec/kf5/* /app/usr/bin/
fi;
cd /
if [ ! -d appimage-exec-wrapper ]; then
git clone git://anongit.kde.org/scratch/brauch/appimage-exec-wrapper
fi;
cd /appimage-exec-wrapper/
make clean
make
cd /app
/bin/cp -v /appimage-exec-wrapper/exec.so exec_wrapper.so
cat > AppRun << EOF
#!/bin/bash
DIR="\`dirname \"\$0\"\`"
DIR="\`( cd \"\$DIR\" && pwd )\`"
export APPDIR=\$DIR
export LD_PRELOAD=\$DIR/exec_wrapper.so
export APPIMAGE_ORIGINAL_QML2_IMPORT_PATH=\$QML2_IMPORT_PATH
export APPIMAGE_ORIGINAL_LD_LIBRARY_PATH=\$LD_LIBRARY_PATH
export APPIMAGE_ORIGINAL_QT_PLUGIN_PATH=\$QT_PLUGIN_PATH
export APPIMAGE_ORIGINAL_XDG_DATA_DIRS=\$XDG_DATA_DIRS
export APPIMAGE_ORIGINAL_XDG_CONFIG_HOME=\$XDG_CONFIG_HOME
export APPIMAGE_ORIGINAL_PATH=\$PATH
export APPIMAGE_ORIGINAL_MLT_REPOSITORY=\$MLT_REPOSITORY
export APPIMAGE_ORIGINAL_MLT_DATA=\$MLT_DATA
export APPIMAGE_ORIGINAL_MLT_ROOT_DIR=\$MLT_ROOT_DIR
export APPIMAGE_ORIGINAL_MLT_PROFILES_PATH=\$MLT_PROFILES_PATH
export APPIMAGE_ORIGINAL_MLT_PRESETS_PATH=\$MLT_PRESETS_PATH
export QML2_IMPORT_PATH=\$DIR/usr/lib/qt5/qml:\$QML2_IMPORT_PATH
export LD_LIBRARY_PATH=\$DIR/usr/lib/:\$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=\$DIR/usr/lib/qt5/plugins/
export XDG_DATA_DIRS=\$DIR/usr/share/:\$XDG_DATA_DIRS
export XDG_CONFIG_HOME=\$HOME/.config/kdenlive-appimage/
export PATH=\$DIR/usr/bin:\$PATH
export KDE_FORK_SLAVES=1
export MLT_REPOSITORY=\$DIR/usr/lib/mlt/
export MLT_DATA=\$DIR/usr/share/mlt/
export MLT_ROOT_DIR=\$DIR/usr/
export LADSPA_PATH=\$DIR/usr/lib/ladspa
export FREI0R_PATH=\$DIR/usr/lib/frei0r-1
export MLT_PROFILES_PATH=\$DIR/usr/share/mlt/profiles/
export MLT_PRESETS_PATH=\$DIR/usr/share/mlt/presets/
export SDL_AUDIODRIVER=pulseaudio
export XDG_CURRENT_DESKTOP=
export APPIMAGE_STARTUP_QML2_IMPORT_PATH=\$QML2_IMPORT_PATH
export APPIMAGE_STARTUP_LD_LIBRARY_PATH=\$LD_LIBRARY_PATH
export APPIMAGE_STARTUP_QT_PLUGIN_PATH=\$QT_PLUGIN_PATH
export APPIMAGE_STARTUP_XDG_DATA_DIRS=\$XDG_DATA_DIRS
export APPIMAGE_STARTUP_XDG_CONFIG_HOME=\$XDG_CONFIG_HOME
export APPIMAGE_STARTUP_PATH=\$PATH
export APPIMAGE_STARTUP_MLT_REPOSITORY=\$MLT_REPOSITORY
export APPIMAGE_STARTUP_MLT_DATA=\$MLT_DATA
export APPIMAGE_STARTUP_MLT_ROOT_DIR=\$MLT_ROOT_DIR
export APPIMAGE_STARTUP_MLT_PROFILES_PATH=\$MLT_PROFILES_PATH
export APPIMAGE_STARTUP_MLT_PRESETS_PATH=\$MLT_PRESETS_PATH
export APPIMAGE_STARTUP_SDL_AUDIODRIVER=\$SDL_AUDIODRIVER
export APPIMAGE_STARTUP_XDG_CURRENT_DESKTOP=\$XDG_CURRENT_DESKTOP
kdenlive --config kdenlive-appimagerc \$@
EOF
chmod +x AppRun
/bin/cp /kdenlive/data/org.kde.kdenlive.desktop kdenlive.desktop
/bin/cp /kdenlive/data/icons/128-apps-kdenlive.png ./kdenlive.png
#TO-DO this will need some text manipulation in ruby to get this var.
APP=Kdenlive
LOWERAPP=kdenlive
get_desktopintegration kdenlive
cd /
#cleanup previous image
rm -Rf /$APP/$APP.AppDir
mkdir -p /$APP/$APP.AppDir
cd /$APP/
cp -R ../app/* $APP.AppDir/
# Remove useless stuff
rm -Rf $APP.AppDir/usr/share/wallpapers/ || true
rm -Rf $APP.AppDir/usr/share/kconf_update/ || true
rm -Rf $APP.AppDir/usr/share/gtk-2.0/ || true
rm -Rf $APP.AppDir/usr/share/gtk-doc/ || true
rm -Rf $APP.AppDir/usr/share/kf5/kdoctools/ || true
rm -Rf $APP.AppDir/usr/share/kservices5/searchproviders/ || true
rm -Rf $APP.AppDir/usr/share/kservices5/useragentstrings/ || true
rm -Rf $APP.AppDir/usr/share/man/ || true
rm -Rf $APP.AppDir/usr/bin/ffserver || true
rm -Rf $APP.AppDir/usr/bin/gtk-demo || true
rm -Rf $APP.AppDir/usr/bin/yasm || true
rm -Rf $APP.AppDir/usr/bin/nasm || true
rm -Rf $APP.AppDir/usr/bin/ndisasm || true
rm -Rf $APP.AppDir/usr/bin/ytasm || true
rm -Rf $APP.AppDir/usr/bin/x264 || true
rm -Rf $APP.AppDir/usr/bin/x265 || true
rm -Rf $APP.AppDir/usr/bin/vsyasm || true
rm -Rf $APP.AppDir/usr/bin/vpxdec || true
rm -Rf $APP.AppDir/usr/bin/vpxenc || true
rm -Rf $APP.AppDir/usr/bin/meinproc5 || true
rm -Rf $APP.AppDir/usr/bin/desktoptojson || true
rm -Rf $APP.AppDir/usr/lib/kconf_update_bin/ || true

View File

@@ -0,0 +1,28 @@
#!/bin/bash
# Halt on errors
set -e
# Be verbose
set -x
echo "++ building dependencies and frameworks..."
. /kdenlive/packaging/appimage/01-dependencies.sh
echo "++ building dependencies and frameworks DONE"
echo "++ building AV libraries (ffmpeg, OpenCV) ..."
. /kdenlive/packaging/appimage/02-avlibs.sh
echo "++ building AV libraries (ffmpeg, OpenCV) DONE"
echo "++ building MLT and Kdenlive ..."
. /kdenlive/packaging/appimage/03-kdenlive.sh
echo "++ building MLT and Kdenlive DONE"
echo "++ Preparing AppImage folder ..."
. /kdenlive/packaging/appimage/04-create-app.sh
echo "++ Preparing AppImage folder DONE"

View File

@@ -0,0 +1,62 @@
# Rules to build 3rd-party libraries for digiKam bundles.
#
# Copyright (c) 2015-2017, Gilles Caulier, <caulier dot gilles at gmail dot com>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#
project(digikam-bundles)
cmake_minimum_required(VERSION 2.8.6)
function(JoinListAsString VALUES GLUE OUTPUT)
string(REPLACE ";" "${GLUE}" _TMP_STR "${VALUES}")
set(${OUTPUT} "${_TMP_STR}" PARENT_SCOPE)
endfunction()
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
message(FATAL_ERROR "Compiling in the source directory is not supported. Use for example 'mkdir build; cd build; cmake ..'.")
endif()
# Tools must be obtained to work with:
include (ExternalProject)
# allow specification of a directory with pre-downloaded
# requirements
if(NOT IS_DIRECTORY ${EXTERNALS_DOWNLOAD_DIR})
message(FATAL_ERROR "No externals download dir set. Use -DEXTERNALS_DOWNLOAD_DIR")
endif()
if(NOT IS_DIRECTORY ${INSTALL_ROOT})
message(FATAL_ERROR "No install dir set. Use -DINSTALL_ROOT")
endif()
set(TOP_INST_DIR ${INSTALL_ROOT})
set(EXTPREFIX "${TOP_INST_DIR}")
set(CMAKE_PREFIX_PATH "${EXTPREFIX}")
message( STATUS "CMAKE_GENERATOR: ${CMAKE_GENERATOR}")
message( STATUS "CMAKE_CL_64: ${CMAKE_CL_64}")
set(GLOBAL_BUILD_TYPE RelWithDebInfo)
set(GLOBAL_PROFILE ${GLOBAL_PROFILE} -DBUILD_TESTING=false)
set(PATCH_COMMAND patch)
# this list must be dependency-ordered
add_subdirectory(ext_jpeg)
add_subdirectory(ext_jasper)
add_subdirectory(ext_png)
add_subdirectory(ext_tiff)
#add_subdirectory(ext_libgphoto2)
#add_subdirectory(ext_sane)
add_subdirectory(ext_exiv2)
add_subdirectory(ext_boost)
#add_subdirectory(ext_opencv)
#add_subdirectory(ext_lensfun)
add_subdirectory(ext_qt)
#add_subdirectory(ext_qtwebkit)
#add_subdirectory(ext_qtav)
#add_subdirectory(ext_kf5)
#add_subdirectory(ext_marble)
#add_subdirectory(ext_libksane)

View File

@@ -0,0 +1,23 @@
# Script to build Boost for digiKam bundle.
#
# Copyright (c) 2015-2017, Gilles Caulier, <caulier dot gilles at gmail dot com>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#
SET(PREFIX_ext_boost "${EXTPREFIX}")
ExternalProject_Add( ext_boost
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
URL http://downloads.sourceforge.net/project/boost/boost/1.60.0/boost_1_60_0.tar.bz2
URL_MD5 65a840e1a0b13a558ff19eeb2c4f0cbe
CONFIGURE_COMMAND <SOURCE_DIR>/bootstrap.sh --prefix=${PREFIX_ext_boost} --with-libraries=system
BUILD_COMMAND <SOURCE_DIR>/b2 install
INSTALL_COMMAND ""
INSTALL_DIR ${PREFIX_ext_boost}
UPDATE_COMMAND ""
ALWAYS 0
BUILD_IN_SOURCE 1
)

View File

@@ -0,0 +1,112 @@
# Script to build Exiv2 for digiKam bundle.
#
# Copyright (c) 2015-2017, Gilles Caulier, <caulier dot gilles at gmail dot com>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#
set(PREFIX_ext_exiv2 "${EXTPREFIX}")
set(Exiv2_Conf -DEXIV2_ENABLE_SHARED=ON
-DEXIV2_ENABLE_XMP=ON
-DEXIV2_ENABLE_LIBXMP=ON
-DEXIV2_ENABLE_PNG=ON
-DEXIV2_ENABLE_NLS=OFF
-DEXIV2_ENABLE_PRINTUCS2=ON
-DEXIV2_ENABLE_LENSDATA=ON
-DEXIV2_ENABLE_COMMERCIAL=OFF
-DEXIV2_ENABLE_BUILD_SAMPLES=OFF
-DEXIV2_ENABLE_BUILD_PO=OFF
-DEXIV2_ENABLE_VIDEO=OFF
-DEXIV2_ENABLE_WEBREADY=OFF
-DEXIV2_ENABLE_CURL=OFF
-DEXIV2_ENABLE_SSH=OFF
)
JoinListAsString("${Exiv2_Conf}" " " BASH_OPTIONS)
if(MINGW)
ExternalProject_Add(ext_exiv2
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
# To use official release tarball
URL http://www.exiv2.org/builds/exiv2-0.26-trunk.tar.gz
URL_MD5 5399e3b570d7f9205f0e76d47582da4c
# To use current implementation from SVN
#SVN_REPOSITORY svn://dev.exiv2.org/svn/trunk
CONFIGURE_COMMAND cd <SOURCE_DIR> &&
./bootstrap.mxe ${MXE_BUILDROOT} RelWithDebInfo ${BASH_OPTIONS}
BUILD_COMMAND cd <SOURCE_DIR>/build && $(MAKE) -j
INSTALL_COMMAND cd <SOURCE_DIR>/build && $(MAKE) install/fast
BUILD_IN_SOURCE 1
UPDATE_COMMAND ""
ALWAYS 0
)
elseif(APPLE)
ExternalProject_Add(ext_exiv2
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
# To use official release tarball
URL http://www.exiv2.org/builds/exiv2-0.26-trunk.tar.gz
URL_MD5 5399e3b570d7f9205f0e76d47582da4c
# To use current implementation from SVN
#SVN_REPOSITORY svn://dev.exiv2.org/svn/trunk
CONFIGURE_COMMAND cp -f ${CMAKE_CURRENT_SOURCE_DIR}/../../../../bootstrap.macports <SOURCE_DIR>/. &&
<SOURCE_DIR>/bootstrap.macports ${PREFIX_ext_exiv2} RelWithDebInfo x86_64 ${BASH_OPTIONS}
BUILD_COMMAND cd <SOURCE_DIR>/build && $(MAKE)
INSTALL_COMMAND cd <SOURCE_DIR>/build && $(MAKE) install/fast
BUILD_IN_SOURCE 1
UPDATE_COMMAND ""
ALWAYS 0
)
else() # Linux
ExternalProject_Add(ext_exiv2
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
# To use official release tarball
URL http://www.exiv2.org/builds/exiv2-0.26-trunk.tar.gz
URL_MD5 5399e3b570d7f9205f0e76d47582da4c
# To use current implementation from SVN
#SVN_REPOSITORY svn://dev.exiv2.org/svn/trunk
CONFIGURE_COMMAND cd <SOURCE_DIR> &&
$(CMAKE_COMMAND) . -DCMAKE_INSTALL_PREFIX=${PREFIX_ext_exiv2}
-DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE}
-DICONV_INCLUDE_DIR=${PREFIX_ext_exiv2}/include
${Exiv2_Conf}
${GLOBAL_PROFILE}
BUILD_COMMAND cd <SOURCE_DIR> && $(MAKE)
INSTALL_COMMAND cd <SOURCE_DIR> && $(MAKE) install/fast
UPDATE_COMMAND ""
ALWAYS 0
)
endif()

View File

@@ -0,0 +1,19 @@
# Script to build jasperlib for digiKam bundle.
#
# Copyright (c) 2015-2017, Gilles Caulier, <caulier dot gilles at gmail dot com>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#
SET(PREFIX_ext_jasper "${EXTPREFIX}")
ExternalProject_Add(ext_jasper
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
URL http://www.ece.uvic.ca/~frodo/jasper/software/jasper-1.900.29.tar.gz
URL_MD5 4619ec9860c10e557b3f192f5e76f596
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${PREFIX_ext_jasper} ${GLOBAL_AUTOMAKE_PROFILE} --disable-opengl
UPDATE_COMMAND ""
ALWAYS 0
)

View File

@@ -0,0 +1,22 @@
# Script to build libjpeg for digiKam bundle.
#
# Copyright (c) 2015-2017, Gilles Caulier, <caulier dot gilles at gmail dot com>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#
SET(PREFIX_ext_jpeg "${EXTPREFIX}")
ExternalProject_Add(ext_jpeg
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
URL https://sourceforge.net/projects/libjpeg-turbo/files/1.5.3/libjpeg-turbo-1.5.3.tar.gz
URL_MD5 7c82f0f6a3130ec06b8a4d0b321cbca3
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${PREFIX_ext_jpeg}
--without-simd
--with-jpeg8
UPDATE_COMMAND ""
ALWAYS 0
)

View File

@@ -0,0 +1,121 @@
# Script to build OpenCV for digiKam bundle.
#
# Copyright (c) 2015-2017, Gilles Caulier, <caulier dot gilles at gmail dot com>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#
set(EXTPREFIX_opencv "${EXTPREFIX}" )
set(Opencv_Conf -DBUILD_EXAMPLES=OFF
-DBUILD_TESTS=OFF
-DBUILD_DOCS=OFF
-DBUILD_PERF_TESTS=OFF
-DBUILD_NEW_PYTHON_SUPPORT=OFF
-BUILD_ZLIB=OFF
-DOPENCV_BUILD_3RDPARTY_LIBS=OFF
-DINSTALL_C_EXAMPLES=OFF
-DINSTALL_PYTHON_EXAMPLES=OFF
-DWITH_1394=OFF
-DWITH_VTK=OFF
-DWITH_CUDA=OFF
-DWITH_DIRECTX=OFF
-DWITH_DSHOW=OFF
-DWITH_EIGEN=OFF
-DWITH_FFMPEG=OFF
-DWITH_GSTREAMER=OFF
-DWITH_GTK=OFF
-DWITH_IPP=OFF
-DWITH_JASPER=OFF
-DWITH_JPEG=OFF
-DWITH_MATLAB=OFF
-DWITH_OPENEXR=OFF
-DWITH_OPENNI=OFF
-DWITH_PNG=OFF
-DWITH_PVAPI=OFF
-DWITH_WIN32UI=OFF
-DWITH_QT=OFF
-DWITH_QUICKTIME=OFF
-DWITH_QT_OPENGL=OFF
-DWITH_TBB=OFF
-DWITH_TIFF=OFF
-DWITH_UNICAP=OFF
-DWITH_V4L=OFF
-DWITH_VFW=OFF
-DWITH_VIDEOINPUT=OFF
-DWITH_XINE=OFF
-DWITH_OPENCL=OFF
-DWITH_GPHOTO2=OFF
-DBUILD_opencv_videoio=OFF
)
JoinListAsString("${Opencv_Conf}" " " BASH_OPTIONS)
if(MINGW)
ExternalProject_Add(ext_opencv
URL https://github.com/Itseez/opencv/archive/3.2.0.zip
URL_MD5 bfc6a261eb069b709bcfe7e363ef5899
CMAKE_ARGS -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE}
-DCMAKE_TOOLCHAIN_FILE=${MXE_TOOLCHAIN}
-DCMAKE_INSTALL_PREFIX=${MXE_INSTALL_PREFIX}
-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON
${GLOBAL_PROFILE}
${Opencv_Conf}
UPDATE_COMMAND ""
ALWAYS 0
)
ExternalProject_Add_step(ext_opencv before_download
# Note : under MXE, in case of curl is not compiled with https support,
# we cannot download the tarball as under Linux/MacOS.
# COMMAND wget -N https://github.com/Itseez/opencv/archive/3.2.0.zip -O ${EXTERNALS_DOWNLOAD_DIR}/3.2.0.zip
# DEPENDERS download
)
elseif(APPLE)
ExternalProject_Add(ext_opencv
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
URL https://github.com/Itseez/opencv/archive/3.2.0.zip
URL_MD5 bfc6a261eb069b709bcfe7e363ef5899
CONFIGURE_COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/../../../../bootstrap.macports <SOURCE_DIR>/. &&
<SOURCE_DIR>/bootstrap.macports ${EXTPREFIX_opencv} RelWithDebInfo x86_64 "${BASH_OPTIONS}"
BUILD_COMMAND cd <SOURCE_DIR>/build && $(MAKE)
INSTALL_COMMAND cd <SOURCE_DIR>/build && make install/fast
BUILD_IN_SOURCE 1
UPDATE_COMMAND ""
ALWAYS 0
)
else() #Linux
ExternalProject_Add(ext_opencv
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
URL https://github.com/Itseez/opencv/archive/3.2.0.zip
URL_MD5 bfc6a261eb069b709bcfe7e363ef5899
INSTALL_DIR ${EXTPREFIX_opencv}
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_opencv}
-DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE}
${GLOBAL_PROFILE}
${Opencv_Conf}
UPDATE_COMMAND ""
ALWAYS 0
)
endif()

View File

@@ -0,0 +1,19 @@
# Script to build libpng for digiKam bundle.
#
# Copyright (c) 2015-2017, Gilles Caulier, <caulier dot gilles at gmail dot com>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#
SET(PREFIX_ext_png "${EXTPREFIX}")
ExternalProject_Add(ext_png
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
URL http://prdownloads.sourceforge.net/libpng/libpng-1.6.26.tar.xz
URL_MD5 faed9bb495d2e12dd0c9ec561ca60cd8
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${PREFIX_ext_png}
UPDATE_COMMAND ""
ALWAYS 0
)

View File

@@ -0,0 +1,65 @@
# Script to build Qt for digiKam bundle.
#
# Copyright (c) 2015-2017, Gilles Caulier, <caulier dot gilles at gmail dot com>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#
SET(EXTPREFIX_qt "${EXTPREFIX}")
ExternalProject_Add(ext_qt
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
URL https://download.qt.io/official_releases/qt/5.9/5.9.4/single/qt-everywhere-opensource-src-5.9.4.tar.xz
URL_MD5 d95f6ecb491e731c2fca622ccc7b6bbd
CONFIGURE_COMMAND <SOURCE_DIR>/configure
-prefix ${EXTPREFIX_qt}
-opensource
-confirm-license
-nomake examples
-sql-sqlite
-fontconfig
-openssl
-optimized-qmake
-no-mtdev
-no-journald
-no-syslog
-no-tslib
-no-directfb
-no-linuxfb
-no-libproxy
-no-pch
-no-compile-examples
-qt-zlib
-qt-pcre
-qt-harfbuzz
-qt-xcb
-qt-xkbcommon-x11
-skip qt3d
-skip qtactiveqt
-skip qtandroidextras
-skip qtcanvas3d
-skip qtcharts
-skip qtconnectivity
-skip qtdatavis3d
-skip qtdoc
-skip qtgamepad
-skip qtlocation
-skip qtmultimedia
-skip qtpurchasing
-skip qtremoteobjects
-skip qtserialport
-skip qtscxml
-skip qtsensors
-skip qtspeech
-skip qttranslations
-skip qtvirtualkeyboard
-skip qtwayland
-skip qtwebsockets
-skip qtwebchannel
-skip qtwebengine
UPDATE_COMMAND ""
BUILD_IN_SOURCE 1
ALWAYS 0
)

View File

@@ -0,0 +1,20 @@
# Script to build libgphoto for digiKam bundle.
#
# Copyright (c) 2015-2017, Gilles Caulier, <caulier dot gilles at gmail dot com>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#
SET(EXTPREFIX_tiff "${EXTPREFIX}" )
ExternalProject_Add(ext_tiff
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
URL ftp://download.osgeo.org/libtiff/tiff-4.0.6.tar.gz
URL_MD5 d1d2e940dea0b5ad435f21f03d96dd72
CONFIGURE_COMMAND <SOURCE_DIR>/configure -prefix ${EXTPREFIX_tiff}
UPDATE_COMMAND ""
ALWAYS 0
)

View File

@@ -0,0 +1,81 @@
----------- These first part is only required once ---------------
# install docker from your package manager
# get docker centos image
docker pull centos:6
# create the container and start it
docker run -i -t centos:6 /bin/bash
# install git
yum -y install git
# clone kdenlive repository
cd /
git clone git://anongit.kde.org/kdenlive.git
# If you want to build a specific branch, now is the time, for example:
cd kdenlive
git checkout -b timeline2 origin/refactoring_timeline
------------------------------------------------------------------
# The next time you want to enter your docker container, use:
docker start -a -i f7001a5ae294
# where f7001a5ae294 is the container id, can be found using
docker ps -a
------------------------------------------------------------------
# Run the build scripts:
. /kdenlive/packaging/appimage/05-buildall.sh
# When the build is finished, you will have an AppImage folder:
/Kdenlive/Kdenlive.AppDir
--- Last step: packaging on the host --------------------------------------------
# You need to create the AppImage from this directory. However
# due to squashfs issues, you cannot create it from inside docker
# so my solution is to copy this folder to the host and do the packaging job here.
Open a new terminal on the host computer.
# Copy the AppImage directory
docker cp f7001a5ae294:/Kdenlive/Kdenlive.AppDir .
# Get AppImageTool if not done yet:
wget https://github.com/AppImage/AppImageKit/releases/download/9/appimagetool-x86_64.AppImage
# Make it executable
chmod +x appimagetool-x86_64.AppImage
# Build the AppImage
./appimagetool-x86_64.AppImage Kdenlive.AppDir
# DONE ! You now have an AppImage called Kdenlive-x86_64.AppImage
-------------------------------------------------------------------------------

View File

@@ -0,0 +1,240 @@
#!/bin/bash
# (C) 2018 V. Pinon <vpinon@kde.org>
# License: GPLv2+
# Tested in Debian sid x86_64
# Be verbose, halt on errors
set -xe
# Prepare the install location
# change this to another location if you prefer
export WLD=/app/usr
SRC_DIR=/external
mkdir -p $WLD/lib $SRC_DIR
# make sure lib and lib64 are the same thing
[[ -L $WLD/lib64 ]] || ln -s $WLD/lib $WLD/lib64
# qjsonparser, used to add metadata to the plugins needs to work in a en_US.UTF-8 environment.
export LC_ALL=en_US.UTF-8 LANG=en_us.UTF-8
export PATH=$WLD/bin:$PATH
export LD_LIBRARY_PATH=$WLD/lib:/usr/lib64/:/usr/lib
export PKG_CONFIG_PATH=$WLD/lib/pkgconfig/:$WLD/share/pkgconfig/:/usr/lib/pkgconfig
export ACLOCAL_PATH=$WLD/share/aclocal
export ACLOCAL="aclocal -I $ACLOCAL_PATH"
CPU_CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
if [[ $CPU_CORES -gt 1 ]]; then
CPU_CORES=$((CPU_CORES-1))
fi
ARCH=$(arch)
if [[ "$ARCH" != "i686" && "$ARCH" != "x86_64" ]] ; then
echo "Architecture could not be determined" ; exit 1
fi
# $1: repo URL, $2: branch
function git_pull {
URL=$1 BRANCH=$2
PKG=${URL##*/}; PKG=${PKG%%.git}
cd $SRC_DIR
if [ -d $PKG ]; then
echo "$PKG already cloned"
cd $PKG
git reset --hard
git checkout $BRANCH
git pull --rebase
cd ..
else
git clone $URL
fi
}
# $1: archive URL
function wget_extract {
URL=$1
ARCHIVE=${URL##*/}
PKGVERS=${ARCHIVE%%.tar.*}
cd $SRC_DIR
if [ -d $SRC_DIR/$PKGVERS ]; then
echo "$PKGVERS already downloaded"
else
[ -f $ARCHIVE ] || wget --no-check-certificate $URL
if [[ ${ARCHIVE##*.} == zip ]] ; then
unzip $ARCHIVE
else
tar -xf ${URL##*/}
fi
fi
}
# $1: package name ; $*: cmake args
function cmake_make {
PKG=$1; shift; CMAKE_ARGS=$*
mkdir -p $SRC_DIR/$PKG/build
cd $SRC_DIR/$PKG/build
cmake -DCMAKE_INSTALL_PREFIX:PATH=$WLD -DCMAKE_BUILD_TYPE=Release $CMAKE_ARGS ..
make -j$CPU_CORES
make install
}
# $1: package name ; $2: configure args
function configure_make {
PKG=$1; shift; CONFIGURE_ARGS=$*
cd $SRC_DIR/$PKG
./configure --prefix=$WLD $CONFIGURE_ARGS
make -j$CPU_CORES
make install
}
# Build tools
wget_extract https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
cmake_make yasm-1.3.0
wget_extract http://www.nasm.us/pub/nasm/releasebuilds/2.13.02/nasm-2.13.02.tar.xz
configure_make nasm-2.13.02
# Media libs
wget_extract ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.1.5.tar.bz2
configure_make alsa-lib-1.1.5
wget_extract https://libsdl.org/release/SDL2-2.0.8.tar.gz
configure_make SDL2-2.0.8 --with-alsa-prefix=$WLD/lib --with-alsa-inc-prefix=$WLD/include
# Image libs
wget_extract https://sourceforge.net/projects/libjpeg-turbo/files/1.5.3/libjpeg-turbo-1.5.3.tar.gz
configure_make libjpeg-turbo-1.5.3
wget_extract http://www.ece.uvic.ca/~frodo/jasper/software/jasper-2.0.14.tar.gz
cmake_make jasper-2.0.14
wget_extract http://prdownloads.sourceforge.net/libpng/libpng-1.6.34.tar.xz
configure_make libpng-1.6.34
wget_extract https://codeload.github.com/Exiv2/exiv2/tar.gz/master
cmake_make exiv2-master \
-DEXIV2_ENABLE_NLS=OFF -DEXIV2_ENABLE_PRINTUCS2=OFF -DEXIV2_ENABLE_LENSDATA=OFF -DEXIV2_ENABLE_BUILD_SAMPLES=OFF
# Codec libs
wget_extract http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.28.tar.gz
configure_make libsndfile-1.0.28
wget_extract http://www.mega-nerd.com/SRC/libsamplerate-0.1.9.tar.gz
configure_make libsamplerate-0.1.9
git_pull https://anonscm.debian.org/git/pkg-multimedia/libvpx.git
configure_make libvpx --enable-shared
git_pull https://anonscm.debian.org/git/pkg-multimedia/x264.git
configure_make x264 --enable-shared
wget_extract http://ftp.videolan.org/pub/videolan/x265/x265_2.7.tar.gz
pushd $SRC_DIR/x265_2.7/build/linux
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$WLD" -DENABLE_SHARED=ON ../../source
make -j$CPU_CORES
make install
popd
git_pull https://anonscm.debian.org/git/pkg-multimedia/ffmpeg.git debian/7%3.4.2-1
configure_make ffmpeg --extra-ldflags="-L$WLD/lib" --extra-cflags="-I$WLD/include" \
--enable-shared --enable-gpl --disable-doc --enable-avfilter --enable-avresample \
--enable-libvpx --enable-libx264 --enable-libx265
# Graphics libs
wget_extract https://www.cairographics.org/releases/cairo-1.14.12.tar.xz
configure_make cairo-1.14.12
wget_extract https://www.freedesktop.org/software/harfbuzz/release/harfbuzz-1.7.6.tar.bz2
configure_make harfbuzz-1.7.6
#requires libfribidi-dev
wget_extract https://download.gnome.org/sources/pango/1.42/pango-1.42.0.tar.xz
configure_make pango-1.42.0
wget_extract https://download.gnome.org/sources/gdk-pixbuf/2.32/gdk-pixbuf-2.32.3.tar.xz
configure_make gdk-pixbuf-2.32.3
wget_extract https://download.gnome.org/sources/gtk+/2.24/gtk+-2.24.32.tar.xz
configure_make gtk+-2.24.32
wget_extract https://download.qt.io/official_releases/qt/5.10/5.10.1/single/qt-everywhere-src-5.10.1.tar.xz
pushd $SRC_DIR/qt-everywhere-src-5.10.1
./configure -prefix $WLD -opensource -confirm-license -release -shared \
-nomake examples -nomake tests -no-pch \
-qt-zlib -qt-pcre -qt-harfbuzz -openssl \
-qt-xcb -qt-xkbcommon-x11
make -j$CPU_CORES
make install
popd
# libxcb-keysyms1-dev
# KDE Frameworks
KF5_VERSION=5.44.0
for FRAMEWORK in \
extra-cmake-modules breeze-icons karchive kconfig kcoreaddons kdbusaddons kguiaddons \
ki18n kitemviews kwidgetsaddons kcompletion kwindowsystem \
kcrash kjobwidgets kauth kcodecs kconfigwidgets kiconthemes \
solid sonnet attica kservice kglobalaccel ktextwidgets \
kxmlgui kbookmarks knotifications kio knewstuff knotifyconfig \
kpackage kdeclarative ; do
#git_pull git://anongit.kde.org/$FRAMEWORK v$KF5_VERSION
wget_extract https://download.kde.org/stable/frameworks/${KF5_VERSION%.*}/$FRAMEWORK-$KF5_VERSION.tar.xz
if [ "$FRAMEWORK" = "breeze-icons" ]; then
cmake_make $FRAMEWORK-$KF5_VERSION -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON -DBUILD_TESTING:BOOL=OFF -DBINARY_ICONS_RESOURCE=1
elif [ "$FRAMEWORK" = "knotifications" ]; then
cd $FRAMEWORK-$KF5_VERSION
cat | patch -p1 << EOF
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0104c73..de44e9a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -59,11 +59,11 @@ find_package(KF5Config \${KF5_DEP_VERSION} REQUIRED)
find_package(KF5Codecs \${KF5_DEP_VERSION} REQUIRED)
find_package(KF5CoreAddons \${KF5_DEP_VERSION} REQUIRED)
-find_package(Phonon4Qt5 4.6.60 REQUIRED NO_MODULE)
-set_package_properties(Phonon4Qt5 PROPERTIES
- DESCRIPTION "Qt-based audio library"
- TYPE REQUIRED
- PURPOSE "Required to build audio notification support")
+#find_package(Phonon4Qt5 4.6.60 REQUIRED NO_MODULE)
+#set_package_properties(Phonon4Qt5 PROPERTIES
+# DESCRIPTION "Qt-based audio library"
+# TYPE REQUIRED
+# PURPOSE "Required to build audio notification support")
if (Phonon4Qt5_FOUND)
add_definitions(-DHAVE_PHONON4QT5)
endif()
EOF
cmake_make $FRAMEWORK-$KF5_VERSION -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON -DBUILD_TESTING:BOOL=OFF
else
cmake_make $FRAMEWORK-$KF5_VERSION -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON -DBUILD_TESTING:BOOL=OFF
fi
done
wget_extract https://download.kde.org/stable/plasma/5.12.4/kdecoration-5.12.4.tar.xz
cmake_make kdecoration-5.12.4 -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON -DBUILD_TESTING:BOOL=OFF
wget_extract https://download.kde.org/stable/plasma/5.12.4/breeze-5.12.4.tar.xz
cmake_make breeze-5.12.4 -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON -DBUILD_TESTING:BOOL=OFF
wget_extract https://codeload.github.com/opencv/opencv/tar.gz/3.4.1
wget_extract https://github.com/opencv/opencv_contrib/archive/3.4.1.tar.gz
cmake_make opencv-3.4.1 -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.4.1/modules \
-DJASPER_INCLUDE_DIR=$WLD/include \
-DBUILD_opencv_plot=ON \
-DBUILD_opencv_aruco=OFF -DBUILD_opencv_bgsegm=OFF -DBUILD_opencv_bioinspired=OFF \
-DBUILD_opencv_ccalib=OFF -DBUILD_opencv_cnn_3dobj=OFF -DBUILD_opencv_cvv=OFF \
-DBUILD_opencv_dnn=OFF -DBUILD_opencv_dnns_easily_fooled=OFF -DBUILD_opencv_dpm=OFF \
-DBUILD_opencv_fuzzy=OFF -DBUILD_opencv_hdf=OFF -DBUILD_opencv_line_descriptor=OFF \
-DBUILD_opencv_matlab=OFF -DBUILD_opencv_optflow=OFF \
-DBUILD_opencv_reg=OFF -DBUILD_opencv_rgbd=OFF -DBUILD_opencv_saliency=OFF \
-DBUILD_opencv_sfm=OFF -DBUILD_opencv_stereo=OFF -DBUILD_opencv_structured_light=OFF \
-DBUILD_opencv_surface_matching=OFF -DBUILD_opencv_xfeatures2d=OFF \
-DBUILD_opencv_xobjdetect=OFF -DBUILD_opencv_xphoto=OFF -DBUILD_opencv_calib3d=OFF \
-DBUILD_opencv_cudaarithm=OFF -DBUILD_opencv_cudabgsegm=OFF \
-DBUILD_opencv_cudacodec=OFF -DBUILD_opencv_cudafilters=OFF \
-DBUILD_opencv_cudalegacy=OFF -DBUILD_opencv_cudaobjdetect=OFF \
-DBUILD_opencv_cudaoptflow=OFF -DBUILD_opencv_cudastereo=OFF \
-DBUILD_opencv_cudawarping=OFF -DBUILD_opencv_cudev=OFF \
-DBUILD_opencv_java=OFF -DBUILD_opencv_shape=OFF -DBUILD_opencv_stitching=OFF \
-DBUILD_opencv_superres=OFF -DBUILD_opencv_ts=OFF -DBUILD_opencv_videoio=OFF \
-DBUILD_opencv_videostab=OFF -DBUILD_opencv_viz=OFF
#git_pull https://github.com/georgmartius/vid.stab
wget_extract https://codeload.github.com/georgmartius/vid.stab/tar.gz/v1.1.0
cmake_make vid.stab-1.1.0
wget_extract https://files.dyne.org/frei0r/releases/frei0r-plugins-1.6.1.tar.gz
cmake_make frei0r-plugins-1.6.1 -DWITHOUT_OPENCV:BOOL=ON
# git_pull https://git.sesse.net/movit
# pushd $SRC_DIR/movit
# ./autogen.sh
# popd
# configure_make movit
git_pull https://github.com/mltframework/mlt.git
configure_make mlt --enable-gpl --disable-rtaudio
#po->ruby
git_pull git://anongit.kde.org/kdenlive
cmake_make kdenlive -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON -DPACKAGERS_BUILD=1 -DBUILD_TESTS=FALSE
#-DKDE_L10N_AUTO_TRANSLATIONS:BOOL=ON \

162
packaging/kdenlive-msys2.sh Normal file
View File

@@ -0,0 +1,162 @@
#!/bin/bash
# (C) 2018 V. Pinon <vpinon@kde.org>
# License: GPLv2+
# Uses msys2 package management, download from msys2.org
# Be verbose, halt on errors
set -xe
[ -z "$MSYSTEM" ] && echo "Please run under MSYS/MINGW(64)" && exit 1
# change this to another location if you prefer
export SRC=$PWD/src
mkdir -p $SRC
export PREFIX=$MINGW_PREFIX
#if [ -n "$PREFIX" ] ; then
# mkdir -p $PREFIX/lib
# export PATH=$PREFIX/bin:$PATH
# export LD_LIBRARY_PATH=$PREFIX/lib:/usr/lib
# export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig:/usr/lib/pkgconfig
#fi
THREADS=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
[[ $THREADS -gt 1 ]] && THREADS=$((THREADS-1))
# $@: package base names
function pacman_install {
pacman -Sy --needed ${@/#/mingw-w64-x86_64-}
}
# $1: repo URL, $2: branch
function git_pull {
URL=$1 BRANCH=$2
PKG=${URL##*/}; PKG=${PKG%%.git}
cd $SRC
if [ -d $PKG ]; then
echo "$PKG already cloned"
cd $PKG
# git reset --hard
git checkout $BRANCH
git pull --rebase
cd ..
else
git clone $URL
fi
}
# $1: archive URL
function wget_extract {
URL=$1
ARCHIVE=${URL##*/}
PKGVERS=${ARCHIVE%%.tar.*}
cd $SRC
if [ -d $SRC/$PKGVERS ]; then
echo "$PKGVERS already downloaded"
else
[ -f $ARCHIVE ] || wget $URL
if [[ ${ARCHIVE##*.} == zip ]] ; then
unzip $ARCHIVE
else
tar -xf ${URL##*/}
fi
fi
}
# $1: package name ; $@: cmake args
function cmake_ninja {
PKG=$1; shift; CMAKE_ARGS="$@"
[ -n "$PREFIX" ] && CMAKE_ARGS+=" -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX"
mkdir -p $SRC/$PKG/build
cd $SRC/$PKG/build
cmake .. -G Ninja $CMAKE_ARGS
ninja install
}
# $1: package name ; $2: configure args
function configure_make {
PKG=$1; shift; CONFIGURE_ARGS="$@"
[ -n "$PREFIX" ] && CONFIGURE_ARGS+=" --prefix=$PREFIX"
cd $SRC/$PKG
./configure $CONFIGURE_ARGS
mingw32-make -j$THREADS
mingw32-make install
}
#### DOWNLOAD DEPS
if pacman -Suy ; then
# MSYS tools
pacman -Sy --needed tar git automake1.16
# MINGW packages
TOOLS="make cmake ninja pkg-config libtool" # ruby
DEPS="gcc drmingw gavl opencv dlfcn SDL2 exiv2 libexif vid.stab ffmpeg gtk2 qt5 fftw ladspa-sdk eigen3 extra-cmake-modules"
KF5=(breeze-icons karchive kconfig kcoreaddons kdbusaddons kguiaddons \
ki18n kitemviews kwidgetsaddons kcompletion kwindowsystem \
kcrash kjobwidgets kauth kcodecs kconfigwidgets kiconthemes \
solid sonnet attica kservice kglobalaccel ktextwidgets \
kxmlgui kbookmarks knotifications kio knewstuff \
kpackage kdeclarative)
pacman_install $DEPS $TOOLS ${KF5[@]/%/-qt5}
fi
#### BUILD EXTRA KF5
KF5_VERSION=$(pacman -Ss $MINGW_PACKAGE_PREFIX-extra-cmake-modules | sed -n 's/.* \(5\..*\)-.*/\1/p')
for FRAMEWORK in knotifyconfig purpose ; do
#git_pull git://anongit.kde.org/$FRAMEWORK v$KF5_VERSION
wget_extract https://download.kde.org/stable/frameworks/${KF5_VERSION%.*}/$FRAMEWORK-$KF5_VERSION.tar.xz
cmake_ninja $FRAMEWORK-$KF5_VERSION \
-DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON
#-DBUILD_TESTING:BOOL=OFF \
#-DKDE_INSTALL_LIBDIR=lib \
#-DKDE_INSTALL_QMLDIR=share/qt5/qml \
#-DKDE_INSTALL_QTPLUGINDIR=share/qt5/plugins \
#-DKDE_INSTALL_DBUSDIR=share/dbus-1 \
#-DKDE_INSTALL_MANDIR=share/man \
#-DKDE_INSTALL_APPDIR=share/applications \
#-DKDE_INSTALL_MIMEDIR=share/mime/packages \
#-DECM_MKSPECS_INSTALL_DIR=$MINGW_PREFIX/share/qt5/mkspecs/modules \
#-DECM_DIR=$MINGW_PREFIX/share/ECM \
done
mkdir -p $MINGW_PREFIX/bin/data/color-schemes
cd $MINGW_PREFIX/bin/data/color-schemes
wget https://cgit.kde.org/breeze.git/plain/colors/{Breeze,BreezeDark,BreezeHighContrast,BreezeLight}.colors
wget https://cgit.kde.org/plasma-desktop.git/plain/kcms/colors/schemes/{Honeycomb,Norway,ObsidianCoast,Oxygen,OxygenCold,Steel,WontonSoup,Zion,ZionReversed}.colors
#### BUILD MULTIMEDIA DEPS
if false ; then # Still Failing
wget_extract https://github.com/jackaudio/jack2/releases/download/v1.9.12/jack2-1.9.12.tar.gz
git_pull https://github.com/jackaudio/jack2.git
pushd $SRC/jack2 #-1.9.12
./waf configure build install -j $THREADS --prefix=$PREFIX
popd
git_pull https://git.sesse.net/movit
pushd $SRC/movit
./autogen.sh
popd
configure_make movit
fi
git_pull https://github.com/dyne/frei0r.git
cmake_ninja frei0r
git_pull https://github.com/mltframework/mlt.git
configure_make mlt --enable-gpl --enable-gpl3
mv $PREFIX/{melt.exe,libmlt*.dll} $PREFIX/bin
#### BUILD KDENLIVE
git_pull https://anongit.kde.org/kdenlive.git
#git_pull https://anongit.kde.org/releaseme.git
#pushd $SRC/kdenlive
#ruby ../releaseme/fetchpo.rb --origin stable --project kdenlive --output-dir po --output-poqm-dir poqm .
#popd
mkdir -p $SRC/kdenlive/build
cd $SRC/kdenlive/build
cmake_ninja kdenlive -DCMAKE_BUILD_TYPE=RelWithDebSymbols -DBUILD_TESTING:BOOL=OFF -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=ON

View File

@@ -17,7 +17,6 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
#include "sampleplugin.h"
#include "ui_countdown_ui.h"
@@ -30,18 +29,23 @@
QStringList SamplePlugin::generators(const QStringList &producers) const
{
QStringList result;
if (producers.contains(QLatin1String("pango"))) result << i18n("Countdown");
if (producers.contains(QLatin1String("noise"))) result << i18n("Noise");
if (producers.contains(QLatin1String("pango"))) {
result << i18n("Countdown");
}
if (producers.contains(QLatin1String("noise"))) {
result << i18n("Noise");
}
return result;
}
QUrl SamplePlugin::generatedClip(const QString &renderer, const QString &generator, const QUrl &projectFolder, const QStringList &/*lumaNames*/, const QStringList &/*lumaFiles*/, const double fps, const int /*width*/, const int height)
{
QString prePath;
if (generator == i18n("Noise")) {
prePath = projectFolder.path() + QLatin1String("/noise");
} else prePath = projectFolder.path() + QLatin1String("/counter");
} else {
prePath = projectFolder.path() + QLatin1String("/counter");
}
int ct = 0;
QString counter = QString::number(ct).rightJustified(5, QLatin1Char('0'), false);
while (QFile::exists(prePath + counter + QLatin1String(".mlt"))) {
@@ -66,7 +70,7 @@ QUrl SamplePlugin::generatedClip(const QString &renderer, const QString &generat
QString clipFile = prePath + counter + QLatin1String(".mlt");
view.path->setUrl(QUrl(clipFile));
QUrl result;
if (d->exec() == QDialog::Accepted) {
QProcess generatorProcess;
@@ -77,8 +81,7 @@ QUrl SamplePlugin::generatedClip(const QString &renderer, const QString &generat
QStringList args;
if (generator == i18n("Noise")) {
args << QLatin1String("noise:") << QLatin1String("in=0") << QLatin1String("out=") + QString::number((int) fps * view.duration->value());
}
else {
} else {
// Countdown producer
for (int i = 0; i < view.duration->value(); ++i) {
// Create the producers
@@ -88,15 +91,14 @@ QUrl SamplePlugin::generatedClip(const QString &renderer, const QString &generat
}
}
args << QLatin1String("-consumer")<<QString::fromLatin1("xml:%1").arg(view.path->url().path());
args << QLatin1String("-consumer") << QString::fromLatin1("xml:%1").arg(view.path->url().path());
generatorProcess.start(renderer, args);
if (generatorProcess.waitForFinished()) {
if (generatorProcess.exitStatus() == QProcess::CrashExit) {
//qDebug() << "/// Generator failed: ";
QString error = QString::fromLocal8Bit(generatorProcess.readAllStandardError());
KMessageBox::sorry(QApplication::activeWindow(), i18n("Failed to generate clip:\n%1", error), i18n("Generator Failed"));
}
else {
} else {
result = view.path->url();
}
} else {
@@ -111,4 +113,3 @@ QUrl SamplePlugin::generatedClip(const QString &renderer, const QString &generat
Q_EXPORT_PLUGIN2(kdenlive_sampleplugin, SamplePlugin)

View File

@@ -17,7 +17,6 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
#ifndef SAMPLEPLUGIN_H
#define SAMPLEPLUGIN_H
@@ -38,6 +37,5 @@ public:
QUrl generatedClip(const QString &renderer, const QString &generator, const QUrl &projectFolder, const QStringList &lumaNames, const QStringList &lumaFiles, const double fps, const int width, const int height);
};
#endif

View File

@@ -7,13 +7,8 @@ set(kdenlive_render_SRCS
)
add_executable(kdenlive_render ${kdenlive_render_SRCS})
ecm_mark_nongui_executable(kdenlive_render)
qt5_use_modules(kdenlive_render Widgets Concurrent DBus)
target_link_libraries(kdenlive_render
${QT_LIBRARIES}
${Qt5_LIBRARIES}
)
target_link_libraries(kdenlive_render Qt5::Core Qt5::DBus)
install(TARGETS kdenlive_render DESTINATION ${BIN_INSTALL_DIR})

View File

@@ -20,6 +20,7 @@
#include <stdio.h>
#include <QCoreApplication>
#include <QStringList>
#include <QFileInfo>
#include <QString>
#include <QUrl>
#include <QDebug>
@@ -48,44 +49,52 @@ int main(int argc, char **argv)
usekuiserver = true;
args.removeFirst();
}
if (QString(args.at(0)).startsWith(QLatin1String("-pid:"))) {
pid = QString(args.at(0)).section(QLatin1Char(':'), 1).toInt();
if (args.at(0).startsWith(QLatin1String("-pid:"))) {
pid = args.at(0).section(QLatin1Char(':'), 1).toInt();
args.removeFirst();
}
if (QString(args.at(0)).startsWith(QLatin1String("-locale:"))) {
locale = QString(args.at(0)).section(QLatin1Char(':'), 1);
if (args.at(0).startsWith(QLatin1String("-locale:"))) {
locale = args.at(0).section(QLatin1Char(':'), 1);
args.removeFirst();
}
if (args.at(0).startsWith(QLatin1String("in=")))
if (args.at(0).startsWith(QLatin1String("in="))) {
in = args.takeFirst().section(QLatin1Char('='), -1).toInt();
if (args.at(0).startsWith(QLatin1String("out=")))
}
if (args.at(0).startsWith(QLatin1String("out="))) {
out = args.takeFirst().section(QLatin1Char('='), -1).toInt();
if (args.at(0).startsWith(QLatin1String("preargs=")))
}
if (args.at(0).startsWith(QLatin1String("preargs="))) {
preargs = args.takeFirst().section(QLatin1Char('='), 1).split(QLatin1Char(' '), QString::SkipEmptyParts);
}
QString render = args.takeFirst();
QString profile = args.takeFirst();
QString rendermodule = args.takeFirst();
QString player = args.takeFirst();
QByteArray srcString = args.takeFirst().toUtf8();
QUrl srcurl = QUrl::fromEncoded(srcString);
QString src = srcurl.path();
QString srcString = args.takeFirst();
QUrl srcurl;
if (srcString.startsWith(QLatin1String("consumer:"))) {
srcurl = QUrl::fromEncoded(srcString.section(QLatin1Char(':'), 1).toUtf8().constData());
} else {
srcurl = QUrl::fromEncoded(srcString.toUtf8().constData());
}
QString src = srcurl.toLocalFile();
// The QUrl path() strips the consumer: protocol, so re-add it if necessary
if (srcString.startsWith("consumer:"))
if (srcString.startsWith(QStringLiteral("consumer:"))) {
src.prepend(QLatin1String("consumer:"));
QUrl desturl = QUrl::fromEncoded(args.takeFirst().toUtf8());
QString dest = desturl.path();
}
QString dest = QFileInfo(QUrl::fromEncoded(args.takeFirst().toUtf8()).toLocalFile()).absoluteFilePath();
bool dualpass = false;
bool doerase;
QString vpre;
int vprepos = args.indexOf(QRegExp(QLatin1String("vpre=.*")));
if (vprepos >= 0) {
vpre=args.at(vprepos);
vpre = args.at(vprepos);
}
QStringList vprelist = vpre.remove(QStringLiteral("vpre=")).split(QLatin1Char(','));
if (vprelist.size() > 0) {
if (!vprelist.isEmpty()) {
args.replaceInStrings(QRegExp(QLatin1String("^vpre=.*")), QStringLiteral("vpre=%1").arg(vprelist.at(0)));
}
@@ -94,7 +103,9 @@ int main(int argc, char **argv)
dualpass = true;
doerase = false;
args.replace(args.indexOf(QStringLiteral("pass=2")), QStringLiteral("pass=1"));
if (args.contains(QStringLiteral("vcodec=libx264"))) args << QStringLiteral("passlogfile=%1").arg(dest + QStringLiteral(".log"));
if (args.contains(QStringLiteral("vcodec=libx264"))) {
args << QStringLiteral("passlogfile=%1").arg(dest + QStringLiteral(".log"));
}
} else {
args.removeAll(QStringLiteral("pass=1"));
doerase = erase;
@@ -108,20 +119,23 @@ int main(int argc, char **argv)
}
}
qDebug() << "//STARTING RENDERING: " << erase << ',' << usekuiserver << ',' << render << ',' << profile << ',' << rendermodule << ',' << player << ',' << src << ',' << dest << ',' << preargs << ',' << args << ',' << in << ',' << out ;
qDebug() << "//STARTING RENDERING: " << erase << ',' << usekuiserver << ',' << render << ',' << profile << ',' << rendermodule << ',' << player << ',' << src << ',' << dest << ',' << preargs << ',' << args << ',' << in << ',' << out;
RenderJob *job = new RenderJob(doerase, usekuiserver, pid, render, profile, rendermodule, player, src, dest, preargs, args, in, out);
if (!locale.isEmpty()) job->setLocale(locale);
if (!locale.isEmpty()) {
job->setLocale(locale);
}
job->start();
RenderJob *dualjob = NULL;
RenderJob *dualjob = nullptr;
if (dualpass) {
if (vprelist.size()>1)
args.replaceInStrings(QRegExp(QLatin1String("^vpre=.*")),QStringLiteral("vpre=%1").arg(vprelist.at(1)));
if (vprelist.size() > 1) {
args.replaceInStrings(QRegExp(QLatin1String("^vpre=.*")), QStringLiteral("vpre=%1").arg(vprelist.at(1)));
}
args.replace(args.indexOf(QStringLiteral("pass=1")), QStringLiteral("pass=2"));
dualjob = new RenderJob(erase, usekuiserver, pid, render, profile, rendermodule, player, src, dest, preargs, args, in, out);
QObject::connect(job, SIGNAL(renderingFinished()), dualjob, SLOT(start()));
QObject::connect(job, &RenderJob::renderingFinished, dualjob, &RenderJob::start);
}
app.exec();
if (dualjob) delete dualjob;
delete dualjob;
} else {
fprintf(stderr, "Kdenlive video renderer for MLT.\nUsage: "
"kdenlive_render [-erase] [-kuiserver] [-locale:LOCALE] [in=pos] [out=pos] [render] [profile] [rendermodule] [player] [src] [dest] [[arg1] [arg2] ...]\n"

View File

@@ -17,7 +17,6 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
#include "renderjob.h"
#include <QtDBus>
@@ -29,24 +28,24 @@
class SleepThread : QThread
{
public:
virtual void run() {}
static void msleep(unsigned long msecs) {
void run() Q_DECL_OVERRIDE {}
static void msleep(unsigned long msecs)
{
QThread::msleep(msecs);
}
};
RenderJob::RenderJob(bool erase, bool usekuiserver, int pid, const QString& renderer, const QString& profile, const QString& rendermodule, const QString& player, const QString& scenelist, const QString& dest, const QStringList& preargs, const QStringList& args, int in, int out) :
RenderJob::RenderJob(bool erase, bool usekuiserver, int pid, const QString &renderer, const QString &profile, const QString &rendermodule, const QString &player, const QString &scenelist, const QString &dest, const QStringList &preargs, const QStringList &args, int in, int out) :
QObject(),
m_scenelist(scenelist),
m_dest(dest),
m_progress(0),
m_prog(renderer),
m_player(player),
m_jobUiserver(NULL),
m_kdenliveinterface(NULL),
m_jobUiserver(nullptr),
m_kdenliveinterface(nullptr),
m_usekuiserver(usekuiserver),
m_logfile(dest + ".txt"),
m_logfile(dest + QStringLiteral(".txt")),
m_erase(erase),
m_seconds(0),
m_frame(0),
@@ -55,14 +54,18 @@ RenderJob::RenderJob(bool erase, bool usekuiserver, int pid, const QString& rend
{
m_renderProcess = new QProcess;
m_renderProcess->setReadChannel(QProcess::StandardError);
connect(m_renderProcess, SIGNAL(stateChanged(QProcess::ProcessState)), this, SLOT(slotCheckProcess(QProcess::ProcessState)));
connect(m_renderProcess, &QProcess::stateChanged, this, &RenderJob::slotCheckProcess);
// Disable VDPAU so that rendering will work even if there is a Kdenlive instance using VDPAU
qputenv("MLT_NO_VDPAU", "1");
m_args << scenelist;
if (in != -1) m_args << QStringLiteral("in=") + QString::number(in);
if (out != -1) m_args << QStringLiteral("out=") + QString::number(out);
if (in != -1) {
m_args << QStringLiteral("in=") + QString::number(in);
}
if (out != -1) {
m_args << QStringLiteral("out=") + QString::number(out);
}
m_args << preargs;
if (scenelist.startsWith(QLatin1String("consumer:"))) {
@@ -75,11 +78,13 @@ RenderJob::RenderJob(bool erase, bool usekuiserver, int pid, const QString& rend
m_dualpass = args.contains(QStringLiteral("pass=1"));
// Create a log of every render process.
if (!m_logfile.open(QIODevice::WriteOnly|QIODevice::Text)) qWarning() << "Unable to log to " << m_logfile.fileName();
else m_logstream.setDevice(&m_logfile);
if (!m_logfile.open(QIODevice::WriteOnly | QIODevice::Text)) {
qWarning() << "Unable to log to " << m_logfile.fileName();
} else {
m_logstream.setDevice(&m_logfile);
}
}
RenderJob::~RenderJob()
{
delete m_renderProcess;
@@ -91,9 +96,11 @@ void RenderJob::setLocale(const QString &locale)
qputenv("LC_NUMERIC", locale.toUtf8().constData());
}
void RenderJob::slotAbort(const QString& url)
void RenderJob::slotAbort(const QString &url)
{
if (m_dest == url) slotAbort();
if (m_dest == url) {
slotAbort();
}
}
void RenderJob::slotAbort()
@@ -106,8 +113,12 @@ void RenderJob::slotAbort()
m_dbusargs.append(QString());
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, QStringLiteral("setRenderingFinished"), m_dbusargs);
}
if (m_jobUiserver) m_jobUiserver->call(QStringLiteral("terminate"), QString());
if (m_erase) QFile(m_scenelist).remove();
if (m_jobUiserver) {
m_jobUiserver->call(QStringLiteral("terminate"), QString());
}
if (m_erase) {
QFile(m_scenelist).remove();
}
QFile(m_dest).remove();
m_logstream << "Job aborted by user" << endl;
m_logstream.flush();
@@ -123,7 +134,9 @@ void RenderJob::receivedStderr()
} else {
m_logstream << "melt: " << result << endl;
int pro = result.section(QLatin1Char(' '), -1).toInt();
if (pro <= m_progress || pro <= 0 || pro > 100) return;
if (pro <= m_progress || pro <= 0 || pro > 100) {
return;
}
m_progress = pro;
if (m_args.contains(QStringLiteral("pass=1"))) {
m_progress /= 2.0;
@@ -138,10 +151,14 @@ void RenderJob::receivedStderr()
if (m_jobUiserver) {
m_jobUiserver->call(QStringLiteral("setPercent"), (uint) m_progress);
int seconds = m_startTime.secsTo(QTime::currentTime());
if (seconds == m_seconds) return;
if (seconds < 0) seconds += 24*60*60;
if (seconds == m_seconds) {
return;
}
if (seconds < 0) {
seconds += 24 * 60 * 60;
}
m_jobUiserver->call(QStringLiteral("setDescriptionField"), (uint) 0,
QString(), tr("Remaining time: ") + QTime(0, 0, 0).addSecs((int) (seconds * (100 - m_progress) / m_progress)).toString("hh:mm:ss"));
QString(), tr("Remaining time: ") + QTime(0, 0, 0).addSecs((int)(seconds * (100 - m_progress) / m_progress)).toString(QStringLiteral("hh:mm:ss")));
//m_jobUiserver->call("setSpeed", (frame - m_frame) / (seconds - m_seconds));
m_frame = frame;
m_seconds = seconds;
@@ -151,7 +168,7 @@ void RenderJob::receivedStderr()
void RenderJob::start()
{
QDBusConnectionInterface* interface = QDBusConnection::sessionBus().interface();
QDBusConnectionInterface *interface = QDBusConnection::sessionBus().interface();
if (interface && m_usekuiserver) {
if (!interface->isServiceRegistered(QStringLiteral("org.kde.JobViewServer"))) {
qWarning() << "No org.kde.JobViewServer registered, trying to start kuiserver";
@@ -169,7 +186,7 @@ void RenderJob::start()
if (interface->isServiceRegistered(QStringLiteral("org.kde.JobViewServer"))) {
QDBusInterface kuiserver(QStringLiteral("org.kde.JobViewServer"), QStringLiteral("/JobViewServer"), QStringLiteral("org.kde.JobViewServer"));
QDBusReply<QDBusObjectPath> objectPath = kuiserver.asyncCall(QLatin1String("requestView"),QLatin1String("kdenlive"), QLatin1String("kdenlive"), 0x0001);
QDBusReply<QDBusObjectPath> objectPath = kuiserver.asyncCall(QStringLiteral("requestView"), QLatin1String("kdenlive"), QLatin1String("kdenlive"), 0x0001);
QString reply = ((QDBusObjectPath) objectPath).path();
// Use of the KDE JobViewServer is an ugly hack, it is not reliable
@@ -177,10 +194,11 @@ void RenderJob::start()
m_jobUiserver = new QDBusInterface(QStringLiteral("org.kde.JobViewServer"), reply, dbusView);
if (m_jobUiserver && m_jobUiserver->isValid()) {
m_startTime = QTime::currentTime();
if (!m_args.contains(QStringLiteral("pass=2")))
if (!m_args.contains(QStringLiteral("pass=2"))) {
m_jobUiserver->call(QStringLiteral("setPercent"), (uint) 0);
}
m_jobUiserver->call("setInfoMessage", tr("Rendering %1").arg(QFileInfo(m_dest).fileName()));
m_jobUiserver->call(QStringLiteral("setInfoMessage"), tr("Rendering %1").arg(QFileInfo(m_dest).fileName()));
QDBusConnection::sessionBus().connect(QStringLiteral("org.kde.JobViewServer"), reply, dbusView, QStringLiteral("cancelRequested"), this, SLOT(slotAbort()));
}
}
@@ -188,37 +206,38 @@ void RenderJob::start()
initKdenliveDbusInterface();
// Make sure the destination directory is writable
QString path = QUrl::fromLocalFile(m_dest).toString(QUrl::RemoveFilename | QUrl::RemoveScheme);
QFileInfo checkDestination(path);
QFileInfo checkDestination(QFileInfo(m_dest).absolutePath());
if (!checkDestination.isWritable()) {
slotIsOver(QProcess::NormalExit, false);
}
// Because of the logging, we connect to stderr in all cases.
connect(m_renderProcess, SIGNAL(readyReadStandardError()), this, SLOT(receivedStderr()));
connect(m_renderProcess, &QProcess::readyReadStandardError, this, &RenderJob::receivedStderr);
m_renderProcess->start(m_prog, m_args);
m_logstream << "Started render process: " << m_prog << ' ' << m_args.join(QStringLiteral(" ")) << endl;
m_logstream << "Started render process: " << m_prog << ' ' << m_args.join(QLatin1Char(' ')) << endl;
}
void RenderJob::initKdenliveDbusInterface()
{
QString kdenliveId;
QDBusConnection connection = QDBusConnection::sessionBus();
QDBusConnectionInterface* ibus = connection.interface();
QDBusConnectionInterface *ibus = connection.interface();
kdenliveId = QStringLiteral("org.kde.kdenlive-%1").arg(m_pid);
if (!ibus->isServiceRegistered(kdenliveId)) {
kdenliveId.clear();
const QStringList services = ibus->registeredServiceNames();
foreach(const QString & service, services) {
if (!service.startsWith(QLatin1String("org.kde.kdenlive")))
for (const QString &service : services) {
if (!service.startsWith(QLatin1String("org.kde.kdenlive"))) {
continue;
}
kdenliveId = service;
break;
}
}
m_dbusargs.clear();
if (kdenliveId.isEmpty()) return;
if (kdenliveId.isEmpty()) {
return;
}
m_kdenliveinterface = new QDBusInterface(kdenliveId,
QStringLiteral("/kdenlive/MainWindow_1"),
QStringLiteral("org.kde.kdenlive.rendering"),
@@ -228,26 +247,26 @@ void RenderJob::initKdenliveDbusInterface()
if (m_kdenliveinterface) {
m_dbusargs.append(m_dest);
m_dbusargs.append((int) 0);
if (!m_args.contains(QStringLiteral("pass=2")))
if (!m_args.contains(QStringLiteral("pass=2"))) {
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, QStringLiteral("setRenderingProgress"), m_dbusargs);
}
connect(m_kdenliveinterface, SIGNAL(abortRenderJob(QString)),
this, SLOT(slotAbort(QString)));
}
}
void RenderJob::slotCheckProcess(QProcess::ProcessState state)
{
if (state == QProcess::NotRunning) slotIsOver(m_renderProcess->exitStatus());
if (state == QProcess::NotRunning) {
slotIsOver(m_renderProcess->exitStatus());
}
}
void RenderJob::slotIsOver(QProcess::ExitStatus status, bool isWritable)
{
if (m_jobUiserver) {
m_jobUiserver->call(QStringLiteral("setDescriptionField"), (uint) 1,
tr("Rendered file"), m_dest);
tr("Rendered file"), m_dest);
//m_jobUiserver->call(QStringLiteral("terminate"), QString());
}
if (!isWritable) {
@@ -261,7 +280,9 @@ void RenderJob::slotIsOver(QProcess::ExitStatus status, bool isWritable)
m_logstream << error << endl;
qApp->quit();
}
if (m_erase) QFile(m_scenelist).remove();
if (m_erase) {
QFile(m_scenelist).remove();
}
if (status == QProcess::CrashExit || m_renderProcess->error() != QProcess::UnknownError || m_renderProcess->exitCode() != 0) {
// rendering crashed
if (m_kdenliveinterface) {
@@ -286,7 +307,7 @@ void RenderJob::slotIsOver(QProcess::ExitStatus status, bool isWritable)
QStringList args = m_player.split(QLatin1Char(' '));
QString exec = args.takeFirst();
// Decode url
QString url = QUrl::fromEncoded(args.takeLast().toUtf8()).path();
QString url = QUrl::fromEncoded(args.takeLast().toUtf8()).toLocalFile();
args << url;
QProcess::startDetached(exec, args);
}
@@ -295,8 +316,8 @@ void RenderJob::slotIsOver(QProcess::ExitStatus status, bool isWritable)
emit renderingFinished();
deleteLater();
} else {
m_logfile.remove();
qApp->quit();
m_logfile.remove();
qApp->quit();
}
}
}

View File

@@ -17,7 +17,6 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
#ifndef RENDERJOB_H
#define RENDERJOB_H
@@ -34,7 +33,7 @@ class RenderJob : public QObject
Q_OBJECT
public:
RenderJob(bool erase, bool usekuiserver, int pid, const QString& renderer, const QString& profile, const QString& rendermodule, const QString& player, const QString& scenelist, const QString& dest, const QStringList& preargs, const QStringList& args, int in = -1, int out = -1);
RenderJob(bool erase, bool usekuiserver, int pid, const QString &renderer, const QString &profile, const QString &rendermodule, const QString &player, const QString &scenelist, const QString &dest, const QStringList &preargs, const QStringList &args, int in = -1, int out = -1);
~RenderJob();
void setLocale(const QString &locale);
@@ -45,7 +44,7 @@ private slots:
void slotIsOver(QProcess::ExitStatus status, bool isWritable = true);
void receivedStderr();
void slotAbort();
void slotAbort(const QString& url);
void slotAbort(const QString &url);
void slotCheckProcess(QProcess::ProcessState state);
private:
@@ -54,8 +53,8 @@ private:
int m_progress;
QString m_prog;
QString m_player;
QDBusInterface* m_jobUiserver;
QDBusInterface* m_kdenliveinterface;
QDBusInterface *m_jobUiserver;
QDBusInterface *m_kdenliveinterface;
bool m_usekuiserver;
/** @brief Used to create a temporary file for logging. */
QFile m_logfile;
@@ -65,7 +64,7 @@ private:
/** @brief The process id of the Kdenlive instance, used to get the dbus service. */
int m_pid;
bool m_dualpass;
QProcess* m_renderProcess;
QProcess *m_renderProcess;
QString m_errorMessage;
QList<QVariant> m_dbusargs;
QTime m_startTime;

View File

@@ -1,79 +1,88 @@
set(QT_USE_QTDBUS 1)
set(QT_USE_QTOPENGL 1)
set(QT_USE_QTSCRIPT 1)
set(QT_USE_QTSVG 1)
set(QT_USE_QTXML 1)
add_definitions(${Qt5Gui_DEFINITIONS})
if(${Qt5Gui_OPENGL_IMPLEMENTATION} STREQUAL "GL")
find_package(OpenGL REQUIRED)
set_package_properties(OpenGL PROPERTIES
DESCRIPTION "the OpenGL library"
URL ""
TYPE RUNTIME
PURPOSE "")
find_package(OpenGL REQUIRED)
set_package_properties(OpenGL PROPERTIES
DESCRIPTION "the OpenGL library"
URL ""
TYPE RUNTIME
PURPOSE "")
else()
find_package(OpenGLES REQUIRED)
set_package_properties(OpenGLES PROPERTIES
DESCRIPTION "the OpenGLES library"
URL ""
TYPE RUNTIME
PURPOSE "")
find_package(OpenGLES REQUIRED)
set_package_properties(OpenGLES PROPERTIES
DESCRIPTION "the OpenGLES library"
URL ""
TYPE RUNTIME
PURPOSE "")
endif()
find_package(PkgConfig QUIET)
execute_process(
COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=mltdatadir mlt-framework
OUTPUT_VARIABLE MLT_DATADIR
RESULT_VARIABLE MLT_DATADIR_failed)
if (NOT MLT_DATADIR_failed)
string(REGEX REPLACE "[\r\n]" "" MLT_DATADIR "${MLT_DATADIR}")
add_definitions(-DMLT_DATADIR=\"${MLT_DATADIR}\")
endif(NOT MLT_DATADIR_failed)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -pedantic -Wextra")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcast-qual -Wcast-align -Wfloat-equal -Wpointer-arith")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wunreachable-code -Wchar-subscripts -Wcomment -Wformat")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror-implicit-function-declaration -Wmain -Wmissing-braces")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wparentheses -Wsequence-point -Wreturn-type -Wswitch")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wuninitialized -Wreorder -Wundef -Wshadow -Wwrite-strings")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsign-compare -Wconversion")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wmissing-noreturn -Wsign-conversion -Wunused ")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wstrict-aliasing -Wstrict-overflow -Wconversion")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wdisabled-optimization")
if (CMAKE_COMPILER_IS_GNUCXX)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wlogical-op -Wunsafe-loop-optimizations ")
endif()
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wunused-parameter -Wshadow -Wno-variadic-macros -Wno-float-conversion")
execute_process(
COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=meltbin mlt-framework
OUTPUT_VARIABLE MLT_MELTBIN
RESULT_VARIABLE MLT_MELTBIN_failed)
if (NOT MLT_MELTBIN_failed)
string(REGEX REPLACE "[\r\n]" "" MLT_MELTBIN "${MLT_MELTBIN}")
add_definitions(-DMLT_MELTBIN=\"${MLT_MELTBIN}\")
endif(NOT MLT_MELTBIN_failed)
if(NOT WIN32)
find_package(PkgConfig QUIET)
execute_process(
COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=mltdatadir mlt-framework
OUTPUT_VARIABLE MLT_DATADIR
RESULT_VARIABLE MLT_DATADIR_failed)
if (NOT MLT_DATADIR_failed)
string(REGEX REPLACE "[\r\n]" "" MLT_DATADIR "${MLT_DATADIR}")
endif()
execute_process(
COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=meltbin mlt-framework
OUTPUT_VARIABLE MLT_MELTBIN
RESULT_VARIABLE MLT_MELTBIN_failed)
if (NOT MLT_MELTBIN_failed)
string(REGEX REPLACE "[\r\n]" "" MLT_MELTBIN "${MLT_MELTBIN}")
endif()
else()
set(MLT_MELTBIN "melt.exe")
set(MLT_DATADIR "../share/mlt")
endif()
configure_file( mlt_config.h.in ${CMAKE_BINARY_DIR}/generated/mlt_config.h )
include_directories( ${CMAKE_BINARY_DIR}/generated/ ) # Make sure it can be included...
option(WITH_JogShuttle "Build Jog/Shuttle support" ON)
set(FFMPEG_SUFFIX "" CACHE STRING "FFmpeg custom suffix")
find_package(LibV4L2)
set_package_properties(LibV4L2 PROPERTIES
DESCRIPTION "Collection of video4linux support libraries"
URL "http://freecode.com/projects/libv4l"
TYPE RUNTIME
PURPOSE "Required for better webcam support")
DESCRIPTION "Collection of video4linux support libraries"
URL "http://freecode.com/projects/libv4l"
TYPE RUNTIME
PURPOSE "Required for better webcam support")
if(WITH_JogShuttle)
check_include_files(linux/input.h HAVE_LINUX_INPUT_H)
if(HAVE_LINUX_INPUT_H)
set(BUILD_JogShuttle TRUE)
endif(HAVE_LINUX_INPUT_H)
endif(WITH_JogShuttle)
set_package_properties(LibV4L2 PROPERTIES
DESCRIPTION "Collection of video4linux support libraries"
URL "http://freecode.com/projects/libv4l"
TYPE RUNTIME
PURPOSE "Required for better webcam support")
check_include_files(linux/input.h HAVE_LINUX_INPUT_H)
if(HAVE_LINUX_INPUT_H)
set(BUILD_JogShuttle TRUE)
endif(HAVE_LINUX_INPUT_H)
endif()
set_package_properties(OpenGL PROPERTIES
DESCRIPTION "the OpenGL library"
URL ""
TYPE RUNTIME
PURPOSE "")
URL ""
TYPE RUNTIME
PURPOSE "")
set_package_properties(QtScript PROPERTIES
DESCRIPTION "Qt module providing core scripting facilities"
URL "http://qt.nokia.com/products/qt"
TYPE RUNTIME
PURPOSE "")
DESCRIPTION "Qt module providing core scripting facilities"
URL "http://qt.nokia.com/products/qt"
TYPE RUNTIME
PURPOSE "")
#if(APPLE)
# macro_log_feature(SDL_FOUND
@@ -83,6 +92,8 @@ set_package_properties(QtScript PROPERTIES
# TRUE
# )
#endif(APPLE)
#add_definitions( -DQT_NO_CAST_FROM_ASCII )
#add_definitions( -DQT_NO_CAST_TO_ASCII )
install(FILES kdenlivesettings.kcfg DESTINATION ${KCFG_INSTALL_DIR})
kconfig_add_kcfg_files(kdenlive_SRCS kdenlivesettings.kcfgc)
@@ -107,126 +118,134 @@ add_subdirectory(onmonitoritems/rotoscoping)
add_subdirectory(mltcontroller)
add_subdirectory(bin)
add_subdirectory(qml)
add_subdirectory(profiles)
if (Qt5WebKitWidgets_FOUND)
add_subdirectory(qt-oauth-lib)
endif(Qt5WebKitWidgets_FOUND)
add_subdirectory(qt-oauth-lib)
endif()
add_subdirectory(library)
list(APPEND kdenlive_SRCS
colortools.cpp
definitions.cpp
gentime.cpp
doc/kthumb.cpp
main.cpp
mainwindow.cpp
renderer.cpp
statusbarmessagelabel.cpp
timecode.cpp
timecodedisplay.cpp
layoutmanagement.cpp
hidetitlebars.cpp
mltconnection.cpp
core.cpp
)
colortools.cpp
definitions.cpp
gentime.cpp
doc/kthumb.cpp
main.cpp
mainwindow.cpp
renderer.cpp
statusbarmessagelabel.cpp
timecode.cpp
timecodedisplay.cpp
layoutmanagement.cpp
hidetitlebars.cpp
mltconnection.cpp
core.cpp
)
ecm_qt_declare_logging_category(kdenlive_SRCS HEADER kdenlive_debug.h IDENTIFIER KDENLIVE_LOG CATEGORY_NAME org.kde.multimedia.kdenlive)
ki18n_wrap_ui(kdenlive_UIS
ui/addtrack_ui.ui
ui/archivewidget_ui.ui
ui/audiospectrum_ui.ui
ui/backupdialog_ui.ui
ui/bezierspline_ui.ui
ui/boolval_ui.ui
ui/clipdurationdialog_ui.ui
ui/clipproperties_ui.ui
ui/cliptranscode_ui.ui
ui/collapsiblewidget_ui.ui
ui/clipstabilize_ui.ui
ui/colorclip_ui.ui
ui/colorplaneexport_ui.ui
ui/configcapture_ui.ui
ui/configenv_ui.ui
ui/configjogshuttle_ui.ui
ui/configmisc_ui.ui
ui/configproject_ui.ui
ui/configsdl_ui.ui
ui/configtimeline_ui.ui
ui/configtranscode_ui.ui
ui/dvdwizardchapters_ui.ui
ui/dvdwizardmenu_ui.ui
ui/dvdwizardstatus_ui.ui
ui/dvdwizardvob_ui.ui
ui/effectlist_ui.ui
ui/freesound_ui.ui
ui/geometryval_ui.ui
ui/geometrywidget_ui.ui
ui/histogram_ui.ui
ui/keyframedialog_ui.ui
ui/keyframeeditor_ui.ui
ui/keyframewidget_ui.ui
ui/listval_ui.ui
ui/logindialog_ui.ui
ui/managecaptures_ui.ui
ui/manageencodingprofile_ui.ui
ui/markerdialog_ui.ui
ui/missingclips_ui.ui
ui/monitoreditwidget_ui.ui
ui/profiledialog_ui.ui
ui/projectsettings_ui.ui
ui/qtextclip_ui.ui
ui/recmonitor_ui.ui
ui/renderwidget_ui.ui
ui/rgbparade_ui.ui
ui/saveprofile_ui.ui
ui/slideshowclip_ui.ui
ui/smconfig_ui.ui
ui/spacerdialog_ui.ui
ui/spectrogram_ui.ui
ui/stopmotion_ui.ui
ui/templateclip_ui.ui
ui/timeline_ui.ui
ui/timelinebuttons_ui.ui
ui/titlewidget_ui.ui
ui/trackheader_ui.ui
ui/tracksconfigdialog_ui.ui
ui/transitionsettings_ui.ui
ui/unicodewidget_ui.ui
ui/urlval_ui.ui
ui/vectorscope_ui.ui
ui/waveform_ui.ui
ui/wipeval_ui.ui
ui/wizardcapture_ui.ui
ui/wizardcheck_ui.ui
ui/wizardextra_ui.ui
ui/wizardmltcheck_ui.ui
ui/wizardstandard_ui.ui
ui/keywordval_ui.ui
ui/fontval_ui.ui
ui/cutjobdialog_ui.ui
ui/scenecutdialog_ui.ui
ui/gradientedit_ui.ui
ui/selectivecolor_ui.ui
ui/clipspeed_ui.ui
)
ui/addtrack_ui.ui
ui/archivewidget_ui.ui
ui/audiospectrum_ui.ui
ui/backupdialog_ui.ui
ui/bezierspline_ui.ui
ui/boolparamwidget_ui.ui
ui/clipdurationdialog_ui.ui
ui/clipproperties_ui.ui
ui/cliptranscode_ui.ui
ui/collapsiblewidget_ui.ui
ui/clipstabilize_ui.ui
ui/colorclip_ui.ui
ui/colorplaneexport_ui.ui
ui/configcapture_ui.ui
ui/configenv_ui.ui
ui/configjogshuttle_ui.ui
ui/configmisc_ui.ui
ui/configproject_ui.ui
ui/configsdl_ui.ui
ui/configtimeline_ui.ui
ui/configtranscode_ui.ui
ui/dvdwizardchapters_ui.ui
ui/dvdwizardmenu_ui.ui
ui/dvdwizardstatus_ui.ui
ui/dvdwizardvob_ui.ui
ui/effectlist_ui.ui
ui/freesound_ui.ui
ui/geometrywidget_ui.ui
ui/histogram_ui.ui
ui/keyframedialog_ui.ui
ui/keyframeeditor_ui.ui
ui/keyframewidget_ui.ui
ui/listparamwidget_ui.ui
ui/logindialog_ui.ui
ui/managecaptures_ui.ui
ui/manageencodingprofile_ui.ui
ui/markerdialog_ui.ui
ui/missingclips_ui.ui
ui/monitoreditwidget_ui.ui
ui/profiledialog_ui.ui
ui/projectsettings_ui.ui
ui/qtextclip_ui.ui
ui/recmonitor_ui.ui
ui/renderwidget_ui.ui
ui/rgbparade_ui.ui
ui/saveprofile_ui.ui
ui/slideshowclip_ui.ui
ui/smconfig_ui.ui
ui/spacerdialog_ui.ui
ui/spectrogram_ui.ui
ui/stopmotion_ui.ui
ui/templateclip_ui.ui
ui/timeline_ui.ui
ui/timelinebuttons_ui.ui
ui/titlewidget_ui.ui
ui/trackheader_ui.ui
ui/tracksconfigdialog_ui.ui
ui/transitionsettings_ui.ui
ui/unicodewidget_ui.ui
ui/urlval_ui.ui
ui/vectorscope_ui.ui
ui/waveform_ui.ui
ui/wipeval_ui.ui
ui/wizardcapture_ui.ui
ui/wizardcheck_ui.ui
ui/wizardextra_ui.ui
ui/wizardmltcheck_ui.ui
ui/wizardstandard_ui.ui
ui/keywordval_ui.ui
ui/fontval_ui.ui
ui/cutjobdialog_ui.ui
ui/scenecutdialog_ui.ui
ui/gradientedit_ui.ui
ui/selectivecolor_ui.ui
ui/clipspeed_ui.ui
)
if(BUILD_JogShuttle)
list(APPEND kdenlive_SRCS
jogshuttle/jogmanager.cpp
jogshuttle/jogaction.cpp
jogshuttle/jogshuttle.cpp
jogshuttle/jogshuttleconfig.cpp
)
endif(BUILD_JogShuttle)
list(APPEND kdenlive_SRCS
jogshuttle/jogmanager.cpp
jogshuttle/jogaction.cpp
jogshuttle/jogshuttle.cpp
jogshuttle/jogshuttleconfig.cpp
)
endif()
# Sets the icon on Windows and OSX
file(GLOB ICONS_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/../data/icons/*-apps-kdenlive.png")
ecm_add_app_icon(kdenlive_SRCS ICONS ${ICONS_SRCS})
qt5_add_dbus_adaptor(kdenlive_SRCS
org.kdenlive.MainWindow.xml
mainwindow.h
MainWindow
)
org.kdenlive.MainWindow.xml
mainwindow.h
MainWindow
)
qt5_add_resources(kdenlive_SRCS icons.qrc ui/resources.qrc uiresources.qrc)
add_executable(kdenlive
${kdenlive_SRCS}
${kdenlive_UIS}
)
${kdenlive_SRCS}
${kdenlive_UIS}
)
# To compile kiss_fft.
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --std=c99")
@@ -236,12 +255,12 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --std=c99")
# prefixes).
include_directories(
${CMAKE_BINARY_DIR}
${MLT_INCLUDE_DIR}
${MLTPP_INCLUDE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/lib/external
${CMAKE_CURRENT_SOURCE_DIR}/lib
)
${CMAKE_BINARY_DIR}
${MLT_INCLUDE_DIR}
${MLTPP_INCLUDE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/lib/external
${CMAKE_CURRENT_SOURCE_DIR}/lib
)
# Adds Qt definitions and include directories, and sets QT_LIBRARIES according
@@ -249,70 +268,83 @@ include_directories(
#include(${QT_USE_FILE})
target_link_libraries(kdenlive
KF5::WidgetsAddons
KF5::Archive
KF5::CoreAddons
KF5::KIOCore
KF5::KIOFileWidgets
KF5::KIOWidgets
KF5::NotifyConfig
KF5::NewStuff
KF5::DBusAddons
KF5::XmlGui
KF5::GuiAddons
KF5::Notifications
KF5::TextWidgets
KF5::IconThemes
KF5::Crash
${Qt5_LIBRARIES}
Qt5::Svg
${OPENGL_LIBRARIES}
${OPENGLES_LIBRARIES}
${MLT_LIBRARIES}
${MLTPP_LIBRARIES}
${CMAKE_DL_LIBS}
${CMAKE_THREAD_LIBS_INIT}
kiss_fft
)
KF5::WidgetsAddons
KF5::Archive
KF5::CoreAddons
KF5::KIOCore
KF5::KIOFileWidgets
KF5::KIOWidgets
KF5::NotifyConfig
KF5::NewStuff
KF5::DBusAddons
KF5::XmlGui
KF5::GuiAddons
KF5::Notifications
KF5::TextWidgets
KF5::IconThemes
Qt5::Svg
${OPENGL_LIBRARIES}
${OPENGLES_LIBRARIES}
${MLT_LIBRARIES}
${MLTPP_LIBRARIES}
${CMAKE_DL_LIBS}
${CMAKE_THREAD_LIBS_INIT}
kiss_fft
)
message(STATUS "Found MLT++: ${MLTPP_LIBRARIES}")
if (KF5_FILEMETADATA)
add_definitions(-DKF5_USE_FILEMETADATA)
target_link_libraries(kdenlive KF5::FileMetaData)
add_definitions(-DKF5_USE_FILEMETADATA)
target_link_libraries(kdenlive KF5::FileMetaData)
endif()
qt5_use_modules( kdenlive Script Widgets Concurrent Qml Quick)
if (DRMINGW_FOUND)
add_definitions(-DUSE_DRMINGW)
target_link_libraries(kdenlive ${DRMINGW_LIBRARY})
elseif (KF5Crash_FOUND)
add_definitions(-DKF5_USE_CRASH)
target_link_libraries(kdenlive KF5::Crash)
endif(DRMINGW_FOUND)
target_link_libraries(kdenlive Qt5::Script Qt5::Widgets Qt5::Concurrent Qt5::Qml Qt5::Quick)
if (KF5_PURPOSE)
add_definitions(-DKF5_USE_PURPOSE)
target_link_libraries(kdenlive KF5::Purpose KF5::PurposeWidgets)
endif()
if (Qt5WebKitWidgets_FOUND)
message(STATUS "Found Qt5 WebKitWidgets. You can use your Freesound.org credentials to download files")
add_definitions(-DQT5_USE_WEBKIT)
target_link_libraries(kdenlive Qt5::WebKitWidgets)
message(STATUS "Found Qt5 WebKitWidgets. You can use your Freesound.org credentials to download files")
add_definitions(-DQT5_USE_WEBKIT)
target_link_libraries(kdenlive Qt5::WebKitWidgets)
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 WebKitWidgets 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)
include_directories(${X11_Xlib_INCLUDE_PATH})
target_link_libraries(kdenlive ${X11_LIBRARIES})
include_directories(${X11_Xlib_INCLUDE_PATH})
target_link_libraries(kdenlive ${X11_LIBRARIES})
endif(Q_WS_X11)
if(SDL_FOUND)
target_link_libraries(kdenlive ${SDL_LIBRARY})
endif(SDL_FOUND)
if(SDL2_FOUND)
target_link_libraries(kdenlive ${SDL2_LIBRARY})
elseif(SDL_FOUND)
target_link_libraries(kdenlive ${SDL_LIBRARY})
endif(SDL2_FOUND)
if(LIBV4L2_FOUND)
include_directories(${LIBV4L2_INCLUDE_DIR})
target_link_libraries(kdenlive ${LIBV4L2_LIBRARY})
add_definitions(-DUSE_V4L)
include_directories(${LIBV4L2_INCLUDE_DIR})
target_link_libraries(kdenlive ${LIBV4L2_LIBRARY})
add_definitions(-DUSE_V4L)
endif()
if(BUILD_JogShuttle)
add_definitions(-DUSE_JOGSHUTTLE)
target_link_libraries(kdenlive
media_ctrl
)
add_definitions(-DUSE_JOGSHUTTLE)
target_link_libraries(kdenlive
media_ctrl
)
endif()
install(TARGETS kdenlive DESTINATION ${BIN_INSTALL_DIR})

View File

@@ -33,21 +33,18 @@
#include <mlt++/Mlt.h>
#include "iecscale.h"
// Code borrowed from Shotcut's audiospectum by Brian Matherly <code@brianmatherly.com> (GPL)
static const int WINDOW_SIZE = 8000; // 6 Hz FFT bins at 48kHz
struct band
{
struct band {
float low; // Low frequency
float high; // High frequency
const char* label;
const char *label;
};
// Preferred frequencies from ISO R 266-1997 / ANSI S1.6-1984
static const band BAND_TAB[] =
{
static const band BAND_TAB[] = {
// Low Preferred High Band
// Freq Center Freq Label Num
{ 1.12, 1.25, 1.41, "1.25" }, // 1
@@ -99,12 +96,11 @@ static const int FIRST_AUDIBLE_BAND_INDEX = 12;
static const int LAST_AUDIBLE_BAND_INDEX = 42;
static const int AUDIBLE_BAND_COUNT = LAST_AUDIBLE_BAND_INDEX - FIRST_AUDIBLE_BAND_INDEX + 1;
EqualizerWidget::EqualizerWidget(QWidget *parent) : QWidget(parent)
{
QGridLayout *box = new QGridLayout(this);
QStringList labels;
labels << i18n("Master") << "50Hz" << "100Hz"<<"156Hz"<<"220Hz"<<"311Hz"<<"440Hz"<<"622Hz"<<"880Hz"<<"1.25kHz"<<"1.75kHz"<<"2.5kHz"<<"3.5kHz"<<"5kHz"<<"10kHz"<<"20kHz";
labels << i18n("Master") << "50Hz" << "100Hz" << "156Hz" << "220Hz" << "311Hz" << "440Hz" << "622Hz" << "880Hz" << "1.25kHz" << "1.75kHz" << "2.5kHz" << "3.5kHz" << "5kHz" << "10kHz" << "20kHz";
for (int i = 0; i < 16; i++) {
QSlider *sl = new QSlider(Qt::Vertical, this);
sl->setObjectName(QString::number(i));
@@ -127,18 +123,20 @@ AudioGraphWidget::AudioGraphWidget(QWidget *parent) : QWidget(parent)
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
}
void AudioGraphWidget::showAudio(const QVector<double>&bands)
void AudioGraphWidget::showAudio(const QVector<double> &bands)
{
m_levels = bands;
update();
}
void AudioGraphWidget::drawDbLabels(QPainter& p, const QRect &rect)
void AudioGraphWidget::drawDbLabels(QPainter &p, const QRect &rect)
{
int dbLabelCount = m_dbLabels.size();
int textHeight = fontMetrics().ascent();
if (dbLabelCount == 0) return;
if (dbLabelCount == 0) {
return;
}
int maxWidth = fontMetrics().width(QStringLiteral("-50"));
// dB scale is vertical along the left side
@@ -166,12 +164,14 @@ void AudioGraphWidget::drawDbLabels(QPainter& p, const QRect &rect)
}
}
void AudioGraphWidget::drawChanLabels(QPainter& p, const QRect &rect, int barWidth)
void AudioGraphWidget::drawChanLabels(QPainter &p, const QRect &rect, int barWidth)
{
int chanLabelCount = m_freqLabels.size();
int stride = 1;
if (chanLabelCount == 0) return;
if (chanLabelCount == 0) {
return;
}
p.setPen(palette().text().color().rgb());
@@ -184,13 +184,13 @@ void AudioGraphWidget::drawChanLabels(QPainter& p, const QRect &rect, int barWid
chanLabelWidth = width > chanLabelWidth ? width : chanLabelWidth;
}
int length = rect.width();
while( chanLabelWidth * chanLabelCount / stride > length ) {
while (chanLabelWidth * chanLabelCount / stride > length) {
stride++;
}
int prevX = 0;
int y = rect.bottom();
for (int i = 0; i < chanLabelCount; i+= stride) {
for (int i = 0; i < chanLabelCount; i += stride) {
QString label = m_freqLabels.at(i);
int x = rect.left() + (2 * i) + i * barWidth + barWidth / 2 - fontMetrics().width(label) / 2;
if (x > prevX) {
@@ -200,7 +200,7 @@ void AudioGraphWidget::drawChanLabels(QPainter& p, const QRect &rect, int barWid
}
}
void AudioGraphWidget::resizeEvent ( QResizeEvent * event )
void AudioGraphWidget::resizeEvent(QResizeEvent *event)
{
drawBackground();
QWidget::resizeEvent(event);
@@ -209,9 +209,13 @@ void AudioGraphWidget::resizeEvent ( QResizeEvent * event )
void AudioGraphWidget::drawBackground()
{
QSize size(width(), height());
if (!size.isValid()) return;
if (!size.isValid()) {
return;
}
m_pixmap = QPixmap(size);
if (m_pixmap.isNull()) return;
if (m_pixmap.isNull()) {
return;
}
m_pixmap.fill(palette().base().color());
QPainter p(&m_pixmap);
QRect rect(0, 0, width() - 3, height());
@@ -220,8 +224,9 @@ void AudioGraphWidget::drawBackground()
int offset = fontMetrics().width(QStringLiteral("888")) + 2;
rect.adjust(offset, 0, 0, 0);
int barWidth = (rect.width() - (2 * (AUDIBLE_BAND_COUNT - 1))) / AUDIBLE_BAND_COUNT;
if (barWidth > 0)
if (barWidth > 0) {
drawChanLabels(p, rect, barWidth);
}
rect.adjust(0, 0, 0, -fontMetrics().height());
m_rect = rect;
}
@@ -231,7 +236,9 @@ void AudioGraphWidget::paintEvent(QPaintEvent *pe)
QPainter p(this);
p.setClipRect(pe->rect());
p.drawPixmap(0, 0, m_pixmap);
if (m_levels.isEmpty()) return;
if (m_levels.isEmpty()) {
return;
}
int chanCount = m_levels.size();
int height = m_rect.height();
int barWidth = (m_rect.width() - (2 * (AUDIBLE_BAND_COUNT - 1))) / AUDIBLE_BAND_COUNT;
@@ -243,9 +250,9 @@ void AudioGraphWidget::paintEvent(QPaintEvent *pe)
}
AudioGraphSpectrum::AudioGraphSpectrum(MonitorManager *manager, QWidget *parent) : QWidget(parent)
, m_manager(manager)
, m_filter(0)
, m_graphWidget(0)
, m_manager(manager)
, m_filter(0)
, m_graphWidget(0)
{
QVBoxLayout *lay = new QVBoxLayout(this);
m_graphWidget = new AudioGraphWidget(this);
@@ -287,22 +294,25 @@ AudioGraphSpectrum::~AudioGraphSpectrum()
void AudioGraphSpectrum::refreshPixmap()
{
if (m_graphWidget)
if (m_graphWidget) {
m_graphWidget->drawBackground();
}
}
void AudioGraphSpectrum::processSpectrum(const SharedFrame&frame)
void AudioGraphSpectrum::processSpectrum(const SharedFrame &frame)
{
if (!isVisible()) return;
if (!isVisible()) {
return;
}
mlt_audio_format format = mlt_audio_s16;
int channels = frame.get_audio_channels();
int frequency = frame.get_audio_frequency();
int samples = frame.get_audio_samples();
Mlt::Frame mFrame = frame.clone(true, false, false);
m_filter->process(mFrame);
mFrame.get_audio( format, frequency, channels, samples );
mFrame.get_audio(format, frequency, channels, samples);
QVector<double> bands(AUDIBLE_BAND_COUNT);
float* bins = (float*)m_filter->get_data("bins");
float *bins = (float *)m_filter->get_data("bins");
int bin_count = m_filter->get_int("bin_count");
double bin_width = m_filter->get_double("bin_width");
@@ -329,7 +339,7 @@ void AudioGraphSpectrum::processSpectrum(const SharedFrame&frame)
break;
}
bands[band] = bins[bin];
} else if (bands[band] < bins[bin] ) {
} else if (bands[band] < bins[bin]) {
// Pick the highest bin level within this band to represent the
// whole band.
bands[band] = bins[bin];
@@ -340,10 +350,10 @@ void AudioGraphSpectrum::processSpectrum(const SharedFrame&frame)
// band. Convert to dB.
for (band = 0; band < bands.size(); band++) {
double mag = bands[band];
double dB = mag > 0.0 ? 20 * log10( mag ) : -1000.0;
double dB = mag > 0.0 ? 20 * log10(mag) : -1000.0;
bands[band] = dB;
}
// Update the audio signal widget
QMetaObject::invokeMethod(m_graphWidget, "showAudio", Qt::QueuedConnection, Q_ARG(const QVector<double>&, bands));
QMetaObject::invokeMethod(m_graphWidget, "showAudio", Qt::QueuedConnection, Q_ARG(const QVector<double> &, bands));
}

View File

@@ -34,9 +34,9 @@
#include <QVector>
#include <QPixmap>
namespace Mlt {
namespace Mlt
{
class Filter;
class Consumer;
}
class MonitorManager;
@@ -45,7 +45,7 @@ class EqualizerWidget : public QWidget
{
Q_OBJECT
public:
explicit EqualizerWidget(QWidget *parent = 0);
explicit EqualizerWidget(QWidget *parent = nullptr);
};
@@ -53,15 +53,15 @@ class AudioGraphWidget : public QWidget
{
Q_OBJECT
public:
explicit AudioGraphWidget(QWidget *parent = 0);
explicit AudioGraphWidget(QWidget *parent = nullptr);
void drawBackground();
public slots:
void showAudio(const QVector<double>&bands);
void showAudio(const QVector<double> &bands);
protected:
void paintEvent(QPaintEvent *pe);
void resizeEvent(QResizeEvent * event);
void resizeEvent(QResizeEvent *event);
private:
QVector<double> m_levels;
@@ -70,25 +70,24 @@ private:
QPixmap m_pixmap;
QRect m_rect;
int m_maxDb;
void drawDbLabels(QPainter& p, const QRect &rect);
void drawChanLabels(QPainter& p, const QRect &rect, int barWidth);
void drawDbLabels(QPainter &p, const QRect &rect);
void drawChanLabels(QPainter &p, const QRect &rect, int barWidth);
};
class AudioGraphSpectrum : public QWidget
{
Q_OBJECT
public:
AudioGraphSpectrum(MonitorManager *manager, QWidget *parent = 0);
AudioGraphSpectrum(MonitorManager *manager, QWidget *parent = nullptr);
virtual ~AudioGraphSpectrum();
private:
MonitorManager *m_manager;
Mlt::Filter* m_filter;
Mlt::Filter *m_filter;
AudioGraphWidget *m_graphWidget;
EqualizerWidget *m_equalizer;
public slots:
void processSpectrum(const SharedFrame&frame);
void processSpectrum(const SharedFrame &frame);
void refreshPixmap();
};

View File

@@ -25,20 +25,21 @@ static inline double IEC_Scale(double dB)
{
double fScale = 1.0f;
if (dB < -70.0f)
if (dB < -70.0f) {
fScale = 0.0f;
else if (dB < -60.0f)
} else if (dB < -60.0f) {
fScale = (dB + 70.0f) * 0.0025f;
else if (dB < -50.0f)
} else if (dB < -50.0f) {
fScale = (dB + 60.0f) * 0.005f + 0.025f;
else if (dB < -40.0)
} else if (dB < -40.0) {
fScale = (dB + 50.0f) * 0.0075f + 0.075f;
else if (dB < -30.0f)
} else if (dB < -30.0f) {
fScale = (dB + 40.0f) * 0.015f + 0.15f;
else if (dB < -20.0f)
} else if (dB < -20.0f) {
fScale = (dB + 30.0f) * 0.02f + 0.3f;
else if (dB < -0.001f || dB > 0.001f) /* if (dB < 0.0f) */
} else if (dB < -0.001f || dB > 0.001f) { /* if (dB < 0.0f) */
fScale = (dB + 20.0f) * 0.025f + 0.5f;
}
return fScale;
}

View File

@@ -8,7 +8,7 @@ modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License or (at your option) version 3 or any later version
accepted by the membership of KDE e.V. (or its successor approved
by the membership of KDE e.V.), which shall act as a proxy
by the membership of KDE e.V.), which shall act as a proxy
defined in Section 14 of version 3 of the license.
This program is distributed in the hope that it will be useful,
@@ -26,9 +26,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <QDomElement>
#include <QVariant>
#include <QPainter>
#include <QDebug>
AbstractProjectItem::AbstractProjectItem(PROJECTITEMTYPE type, const QString &id, AbstractProjectItem* parent) :
AbstractProjectItem::AbstractProjectItem(PROJECTITEMTYPE type, const QString &id, AbstractProjectItem *parent) :
QObject()
, m_parent(parent)
, m_id(id)
@@ -41,7 +40,7 @@ AbstractProjectItem::AbstractProjectItem(PROJECTITEMTYPE type, const QString &id
{
}
AbstractProjectItem::AbstractProjectItem(PROJECTITEMTYPE type, const QDomElement& description, AbstractProjectItem* parent) :
AbstractProjectItem::AbstractProjectItem(PROJECTITEMTYPE type, const QDomElement &description, AbstractProjectItem *parent) :
QObject()
, m_parent(parent)
, m_id(description.attribute(QStringLiteral("id")))
@@ -63,15 +62,15 @@ AbstractProjectItem::~AbstractProjectItem()
}
}
bool AbstractProjectItem::operator==(const AbstractProjectItem* projectItem) const
bool AbstractProjectItem::operator==(const AbstractProjectItem *projectItem) const
{
// FIXME: only works for folders
bool equal = static_cast<const QList* const>(this) == static_cast<const QList* const>(projectItem);
bool equal = static_cast<const QList *const>(this) == static_cast<const QList *const>(projectItem);
equal &= m_parent == projectItem->parent();
return equal;
}
AbstractProjectItem* AbstractProjectItem::parent() const
AbstractProjectItem *AbstractProjectItem::parent() const
{
return m_parent;
}
@@ -104,8 +103,7 @@ const QString &AbstractProjectItem::clipId() const
return m_id;
}
void AbstractProjectItem::setParent(AbstractProjectItem* parent)
void AbstractProjectItem::setParent(AbstractProjectItem *parent)
{
if (m_parent != parent) {
if (m_parent) {
@@ -120,12 +118,12 @@ void AbstractProjectItem::setParent(AbstractProjectItem* parent)
}
}
Bin* AbstractProjectItem::bin()
Bin *AbstractProjectItem::bin()
{
if (m_parent) {
return m_parent->bin();
}
return NULL;
return nullptr;
}
QPixmap AbstractProjectItem::roundedPixmap(const QPixmap &source)
@@ -142,16 +140,16 @@ QPixmap AbstractProjectItem::roundedPixmap(const QPixmap &source)
return pix;
}
void AbstractProjectItem::addChild(AbstractProjectItem* child)
void AbstractProjectItem::addChild(AbstractProjectItem *child)
{
if (child && !contains(child)) {
bin()->emitAboutToAddItem(child);
append(child);
bin()->emitItemAdded(child);
bin()->emitItemAdded(child);
}
}
void AbstractProjectItem::removeChild(AbstractProjectItem* child)
void AbstractProjectItem::removeChild(AbstractProjectItem *child)
{
if (child && contains(child)) {
bin()->emitAboutToRemoveItem(child);
@@ -163,7 +161,7 @@ void AbstractProjectItem::removeChild(AbstractProjectItem* child)
int AbstractProjectItem::index() const
{
if (m_parent) {
return m_parent->indexOf(const_cast<AbstractProjectItem*>(this));
return m_parent->indexOf(const_cast<AbstractProjectItem *>(this));
}
return 0;
}
@@ -173,52 +171,51 @@ AbstractProjectItem::PROJECTITEMTYPE AbstractProjectItem::itemType() const
return m_itemType;
}
QVariant AbstractProjectItem::data(DataType type) const
{
QVariant data;
switch (type) {
case DataName:
data = QVariant(m_name);
break;
case DataDescription:
data = QVariant(m_description);
break;
case DataThumbnail:
data = QVariant(m_thumbnail);
break;
case DataId:
data = QVariant(m_id);
break;
case DataDuration:
data = QVariant(m_duration);
break;
case DataDate:
data = QVariant(m_date);
break;
case UsageCount:
data = QVariant(m_usage);
break;
case ItemTypeRole:
data = QVariant(m_itemType);
break;
case JobType:
data = QVariant(m_jobType);
break;
case JobProgress:
data = QVariant(m_jobProgress);
break;
case JobMessage:
data = QVariant(m_jobMessage);
break;
case ClipStatus:
data = QVariant(m_clipStatus);
break;
case ClipToolTip:
data = QVariant(getToolTip());
break;
default:
break;
case DataName:
data = QVariant(m_name);
break;
case DataDescription:
data = QVariant(m_description);
break;
case DataThumbnail:
data = QVariant(m_thumbnail);
break;
case DataId:
data = QVariant(m_id);
break;
case DataDuration:
data = QVariant(m_duration);
break;
case DataDate:
data = QVariant(m_date);
break;
case UsageCount:
data = QVariant(m_usage);
break;
case ItemTypeRole:
data = QVariant(m_itemType);
break;
case JobType:
data = QVariant(m_jobType);
break;
case JobProgress:
data = QVariant(m_jobProgress);
break;
case JobMessage:
data = QVariant(m_jobMessage);
break;
case ClipStatus:
data = QVariant(m_clipStatus);
break;
case ClipToolTip:
data = QVariant(getToolTip());
break;
default:
break;
}
return data;
}
@@ -233,7 +230,7 @@ QString AbstractProjectItem::name() const
return m_name;
}
void AbstractProjectItem::setName(const QString& name)
void AbstractProjectItem::setName(const QString &name)
{
m_name = name;
}
@@ -243,7 +240,7 @@ QString AbstractProjectItem::description() const
return m_description;
}
void AbstractProjectItem::setDescription(const QString& description)
void AbstractProjectItem::setDescription(const QString &description)
{
m_description = description;
}
@@ -268,4 +265,3 @@ AbstractProjectItem::CLIPSTATUS AbstractProjectItem::clipStatus() const
return m_clipStatus;
}

View File

@@ -8,7 +8,7 @@ modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License or (at your option) version 3 or any later version
accepted by the membership of KDE e.V. (or its successor approved
by the membership of KDE e.V.), which shall act as a proxy
by the membership of KDE e.V.), which shall act as a proxy
defined in Section 14 of version 3 of the license.
This program is distributed in the hope that it will be useful,
@@ -35,8 +35,6 @@ class Bin;
class QDomElement;
class QDomDocument;
/**
* @class AbstractProjectItem
* @brief Base class for all project items (clips, folders, ...).
@@ -44,7 +42,6 @@ class QDomDocument;
* Project items are stored in a tree like structure ...
*/
class AbstractProjectItem : public QObject, public QList<AbstractProjectItem *>
{
Q_OBJECT
@@ -62,7 +59,7 @@ public:
* @brief Constructor.
* @param parent parent this item should be added to
*/
AbstractProjectItem(PROJECTITEMTYPE type, const QString &id, AbstractProjectItem *parent = 0);
AbstractProjectItem(PROJECTITEMTYPE type, const QString &id, AbstractProjectItem *parent = nullptr);
/**
* @brief Creates a project item upon project load.
* @param description element for this item.
@@ -70,7 +67,7 @@ public:
*
* We try to read the attributes "name" and "description"
*/
AbstractProjectItem(PROJECTITEMTYPE type, const QDomElement &description, AbstractProjectItem* parent = 0);
AbstractProjectItem(PROJECTITEMTYPE type, const QDomElement &description, AbstractProjectItem *parent = nullptr);
virtual ~AbstractProjectItem();
bool operator==(const AbstractProjectItem *projectItem) const;
@@ -90,7 +87,7 @@ public:
/**
* @brief Removes a child item and notifies the bin model about it (before and after).
* @param child project which sould be removed from the child list
* @param child project which should be removed from the child list
*
* This function is called when a child's parent is changed through setParent
*/
@@ -101,14 +98,14 @@ public:
/** @brief Returns the index this item has in its parent's child list. */
int index() const;
/** @brief Returns the type of this item (folder, clip, subclip, etc). */
PROJECTITEMTYPE itemType() const;
/** @brief Used to search for a clip with a specific id. */
virtual ProjectClip *clip(const QString &id) = 0;
/** @brief Used to search for a folder with a specific id. */
virtual ProjectFolder* folder(const QString &id) = 0;
virtual ProjectFolder *folder(const QString &id) = 0;
virtual ProjectClip *clipAt(int ix) = 0;
/** @brief Recursively disable/enable bin effects. */
virtual void disableEffects(bool disable) = 0;
@@ -138,20 +135,20 @@ public:
DataDate,
// Description for item (user editable)
DataDescription,
// Number of occurences used in timeline
// Number of occurrences used in timeline
UsageCount,
// Empty if clip has no effect, icon otherwise
IconOverlay,
IconOverlay,
// item type (clip, subclip, folder)
ItemTypeRole,
// Duration of the clip
DataDuration,
// If there is a running job, which type
JobType,
JobType,
// Current progress of the job
JobProgress,
JobProgress,
// error message if job crashes (not fully implemented)
JobMessage,
JobMessage,
// Item status (ready or not, missing, waiting, ...)
ClipStatus
};
@@ -162,7 +159,7 @@ public:
StatusWaiting,
StatusDeleting
};
void setClipStatus(AbstractProjectItem::CLIPSTATUS status);
AbstractProjectItem::CLIPSTATUS clipStatus() const;
bool statusReady() const;
@@ -215,7 +212,7 @@ protected:
CLIPSTATUS m_clipStatus;
AbstractClipJob::JOBTYPE m_jobType;
int m_jobProgress;
QString m_jobMessage;
PROJECTITEMTYPE m_itemType;

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License or (at your option) version 3 or any later version
accepted by the membership of KDE e.V. (or its successor approved
by the membership of KDE e.V.), which shall act as a proxy
by the membership of KDE e.V.), which shall act as a proxy
defined in Section 14 of version 3 of the license.
This program is distributed in the hope that it will be useful,
@@ -60,20 +60,23 @@ class ProjectSortProxyModel;
class JobManager;
class ProjectFolderUp;
class InvalidDialog;
class BinItemDelegate;
class BinMessageWidget;
class SmallJobLabel;
namespace Mlt {
class Producer;
};
namespace Mlt
{
class Producer;
}
class MyListView: public QListView
{
Q_OBJECT
public:
explicit MyListView(QWidget *parent = 0);
explicit MyListView(QWidget *parent = nullptr);
protected:
void focusInEvent(QFocusEvent *event);
void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
signals:
void focusView();
};
@@ -83,23 +86,23 @@ class MyTreeView: public QTreeView
Q_OBJECT
Q_PROPERTY(bool editing READ isEditing WRITE setEditing)
public:
explicit MyTreeView(QWidget *parent = 0);
explicit MyTreeView(QWidget *parent = nullptr);
void setEditing(bool edit);
protected:
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent * event);
void focusInEvent(QFocusEvent *event);
void keyPressEvent(QKeyEvent* event);
void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
protected slots:
void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint);
void editorDestroyed(QObject *editor);
void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint) Q_DECL_OVERRIDE;
void editorDestroyed(QObject *editor) Q_DECL_OVERRIDE;
private:
QPoint m_startPos;
bool m_editing;
bool performDrag();
bool isEditing();
bool isEditing() const;
signals:
void focusView();
@@ -109,22 +112,21 @@ class BinMessageWidget: public KMessageWidget
{
Q_OBJECT
public:
explicit BinMessageWidget(QWidget *parent = 0);
BinMessageWidget(const QString &text, QWidget *parent = 0);
explicit BinMessageWidget(QWidget *parent = nullptr);
BinMessageWidget(const QString &text, QWidget *parent = nullptr);
protected:
bool event(QEvent* ev);
bool event(QEvent *ev) Q_DECL_OVERRIDE;
signals:
void messageClosing();
};
class SmallJobLabel: public QPushButton
{
Q_OBJECT
public:
explicit SmallJobLabel(QWidget *parent = 0);
explicit SmallJobLabel(QWidget *parent = nullptr);
static const QString getStyleSheet(const QPalette &p);
void setAction(QAction *action);
private:
@@ -134,7 +136,7 @@ private:
UsageRole
};
QTimeLine* m_timeLine;
QTimeLine *m_timeLine;
QAction *m_action;
public slots:
@@ -145,203 +147,14 @@ private slots:
void slotTimeLineFinished();
};
/**
* @class BinItemDelegate
* @brief This class is responsible for drawing items in the QTreeView.
*/
class BinItemDelegate: public QStyledItemDelegate
{
public:
explicit BinItemDelegate(QObject* parent = 0): QStyledItemDelegate(parent)
{
}
void updateEditorGeometry(QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index) const
{
if (index.column() != 0) {
return QStyledItemDelegate::updateEditorGeometry(editor, option, index);
}
QStyleOptionViewItem opt = option;
initStyleOption(&opt, index);
QRect r1 = option.rect;
QStyle *style = opt.widget ? opt.widget->style() : QApplication::style();
const int textMargin = style->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1;
int type = index.data(AbstractProjectItem::ItemTypeRole).toInt();
double factor = (double) opt.decorationSize.height() / r1.height();
int decoWidth = 2 * textMargin;
int mid = 0;
if (factor != 0) {
decoWidth += opt.decorationSize.width() / factor;
}
if (type == AbstractProjectItem::ClipItem || type == AbstractProjectItem::SubClipItem) {
mid = (int)((r1.height() / 2));
}
r1.adjust(decoWidth, 0, 0, -mid);
QFont ft = option.font;
ft.setBold(true);
QFontMetricsF fm(ft);
QRect r2 =fm.boundingRect(r1, Qt::AlignLeft | Qt::AlignTop, index.data(AbstractProjectItem::DataName).toString()).toRect();
editor->setGeometry( r2 );
}
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QSize hint = QStyledItemDelegate::sizeHint(option, index);
QString text = index.data(AbstractProjectItem::DataName).toString();
QRectF r = option.rect;
QFont ft = option.font;
ft.setBold(true);
QFontMetricsF fm(ft);
QStyle *style = option.widget ? option.widget->style() : QApplication::style();
const int textMargin = style->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1;
int width = fm.boundingRect(r, Qt::AlignLeft | Qt::AlignTop, text).width() + option.decorationSize.width() + 2 * textMargin;
hint.setWidth(width);
int type = index.data(AbstractProjectItem::ItemTypeRole).toInt();
if (type == AbstractProjectItem::FolderItem || type == AbstractProjectItem::FolderUpItem) {
return QSize(hint.width(), qMin(option.fontMetrics.lineSpacing() + 4, hint.height()));
}
if (type == AbstractProjectItem::ClipItem) {
return QSize(hint.width(), qMax(option.fontMetrics.lineSpacing() * 2 + 4, qMax(hint.height(), option.decorationSize.height())));
}
if (type == AbstractProjectItem::SubClipItem) {
return QSize(hint.width(), qMax(option.fontMetrics.lineSpacing() * 2 + 4, qMin(hint.height(), (int) (option.decorationSize.height() / 1.5))));
}
QIcon icon = qvariant_cast<QIcon>(index.data(Qt::DecorationRole));
QString line1 = index.data(Qt::DisplayRole).toString();
QString line2 = index.data(Qt::UserRole).toString();
int textW = qMax(option.fontMetrics.width(line1), option.fontMetrics.width(line2));
QSize iconSize = icon.actualSize(option.decorationSize);
return QSize(qMax(textW, iconSize.width()) + 4, option.fontMetrics.lineSpacing() * 2 + 4);
}
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const {
if (index.column() == 0 && !index.data().isNull()) {
QRect r1 = option.rect;
painter->save();
painter->setClipRect(r1);
QStyleOptionViewItem opt(option);
initStyleOption(&opt, index);
int type = index.data(AbstractProjectItem::ItemTypeRole).toInt();
QStyle *style = opt.widget ? opt.widget->style() : QApplication::style();
const int textMargin = style->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1;
//QRect r = QStyle::alignedRect(opt.direction, Qt::AlignVCenter | Qt::AlignLeft, opt.decorationSize, r1);
style->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, opt.widget);
if (option.state & QStyle::State_Selected) {
painter->setPen(option.palette.highlightedText().color());
}
else painter->setPen(option.palette.text().color());
QRect r = r1;
QFont font = painter->font();
font.setBold(true);
painter->setFont(font);
if (type == AbstractProjectItem::ClipItem || type == AbstractProjectItem::SubClipItem) {
double factor = (double) opt.decorationSize.height() / r1.height();
int decoWidth = 2 * textMargin;
if (factor != 0) {
r.setWidth(opt.decorationSize.width() / factor);
// Draw thumbnail
opt.icon.paint(painter, r);
decoWidth += r.width();
}
int mid = (int)((r1.height() / 2));
r1.adjust(decoWidth, 0, 0, -mid);
QRect r2 = option.rect;
r2.adjust(decoWidth, mid, 0, 0);
QRectF bounding;
painter->drawText(r1, Qt::AlignLeft | Qt::AlignTop, index.data(AbstractProjectItem::DataName).toString(), &bounding);
font.setBold(false);
painter->setFont(font);
QString subText = index.data(AbstractProjectItem::DataDuration).toString();
if (!subText.isEmpty()) {
r2.adjust(0, bounding.bottom() - r2.top(), 0, 0);
QColor subTextColor = painter->pen().color();
subTextColor.setAlphaF(.5);
painter->setPen(subTextColor);
painter->drawText(r2, Qt::AlignLeft | Qt::AlignTop , subText, &bounding);
// Draw usage counter
int usage = index.data(AbstractProjectItem::UsageCount).toInt();
if (usage > 0) {
bounding.moveLeft(bounding.right() + (2 * textMargin));
QString us = QString().sprintf("[%d]", usage);
painter->drawText(bounding, Qt::AlignLeft | Qt::AlignTop , us, &bounding);
}
}
if (type == AbstractProjectItem::ClipItem) {
// Overlay icon if necessary
QVariant v = index.data(AbstractProjectItem::IconOverlay);
if (!v.isNull()) {
QIcon reload = QIcon::fromTheme(v.toString());
r.setTop(r.bottom() - bounding.height());
r.setWidth(bounding.height());
reload.paint(painter, r);
}
int jobProgress = index.data(AbstractProjectItem::JobProgress).toInt();
if (jobProgress > 0 || jobProgress == JobWaiting) {
// Draw job progress bar
int progressWidth = option.fontMetrics.averageCharWidth() * 8;
int progressHeight = option.fontMetrics.ascent() / 4;
QRect progress(r1.x() + 1, opt.rect.bottom() - progressHeight - 2, progressWidth , progressHeight);
painter->setPen(Qt::NoPen);
painter->setBrush(Qt::darkGray);
if (jobProgress > 0) {
painter->drawRoundedRect(progress, 2, 2);
painter->setBrush(option.state & QStyle::State_Selected ? option.palette.text() : option.palette.highlight());
progress.setWidth((progressWidth - 2) * jobProgress / 100);
painter->drawRoundedRect(progress, 2, 2);
} else if (jobProgress == JobWaiting) {
// Draw kind of a pause icon
progress.setWidth(3);
painter->drawRect(progress);
progress.moveLeft(progress.right() + 3);
painter->drawRect(progress);
}
} else if (jobProgress == JobCrashed) {
QString jobText = index.data(AbstractProjectItem::JobMessage).toString();
if (!jobText.isEmpty()) {
QRectF txtBounding = painter->boundingRect(r2, Qt::AlignRight | Qt::AlignVCenter, " " + jobText + " ");
painter->setPen(Qt::NoPen);
painter->setBrush(option.palette.highlight());
painter->drawRoundedRect(txtBounding, 2, 2);
painter->setPen(option.palette.highlightedText().color());
painter->drawText(txtBounding, Qt::AlignCenter, jobText);
}
}
}
}
else {
// Folder or Folder Up items
double factor = (double) opt.decorationSize.height() / r1.height();
int decoWidth = 2 * textMargin;
if (factor != 0) {
r.setWidth(opt.decorationSize.width() / factor);
// Draw thumbnail
opt.icon.paint(painter, r);
decoWidth += r.width();
}
r1.adjust(decoWidth, 0, 0, 0);
QRectF bounding;
painter->drawText(r1, Qt::AlignLeft | Qt::AlignTop, index.data(AbstractProjectItem::DataName).toString(), &bounding);
}
painter->restore();
} else {
QStyledItemDelegate::paint(painter, option, index);
}
}
};
class LineEventEater : public QObject
{
Q_OBJECT
public:
explicit LineEventEater(QObject *parent = 0);
explicit LineEventEater(QObject *parent = nullptr);
protected:
bool eventFilter(QObject *obj, QEvent *event);
bool eventFilter(QObject *obj, QEvent *event) Q_DECL_OVERRIDE;
signals:
void clearSearchLine();
@@ -362,7 +175,7 @@ class Bin : public QWidget
enum BinViewType {BinTreeView, BinIconView };
public:
explicit Bin(QWidget* parent = 0);
explicit Bin(QWidget *parent = nullptr);
~Bin();
bool isLoading;
@@ -374,10 +187,10 @@ public:
ProjectFolder *rootFolder();
/** @brief Create a clip item from its xml description */
void createClip(QDomElement xml);
void createClip(const QDomElement &xml);
/** @brief Used to notify the Model View that an item was updated */
void emitItemUpdated(AbstractProjectItem* item);
void emitItemUpdated(AbstractProjectItem *item);
/** @brief Set monitor associated with this bin (clipmonitor) */
void setMonitor(Monitor *monitor);
@@ -396,34 +209,35 @@ public:
ProjectClip *getBinClip(const QString &id);
/** @brief Returns a list of selected clips */
QList <ProjectClip *> selectedClips();
QList<ProjectClip *> selectedClips();
/** @brief Start a job of selected type for a clip */
void startJob(const QString &id, AbstractClipJob::JOBTYPE type);
/** @brief Discard jobs from a chosen type, use NOJOBTYPE to discard all jobs for this clip */
void discardJobs(const QString &id, AbstractClipJob::JOBTYPE type = AbstractClipJob::NOJOBTYPE);
/** @brief Discard jobs from a chosen type, use NOJOBTYPE to discard all jobs for this clip
* @returns true if a job was found and discarded
*/
bool discardJobs(const QString &id, AbstractClipJob::JOBTYPE type = AbstractClipJob::NOJOBTYPE);
/** @brief Check if there is a job waiting / running for this clip */
bool hasPendingJob(const QString &id, AbstractClipJob::JOBTYPE type);
/** @brief Reload / replace a producer */
void reloadProducer(const QString &id, QDomElement xml);
void reloadProducer(const QString &id, const QDomElement &xml);
/** @brief Current producer has changed, refresh monitor and timeline*/
void refreshClip(const QString &id);
/** @brief Some stuff used to notify the Item Model */
void emitAboutToAddItem(AbstractProjectItem* item);
void emitItemAdded(AbstractProjectItem* item);
void emitAboutToRemoveItem(AbstractProjectItem* item);
void emitItemRemoved(AbstractProjectItem* item);
void setupMenu(QMenu *addMenu, QAction *defaultAction, QHash <QString, QAction*> actions);
void emitAboutToAddItem(AbstractProjectItem *item);
void emitItemAdded(AbstractProjectItem *item);
void emitAboutToRemoveItem(AbstractProjectItem *item);
void emitItemRemoved(AbstractProjectItem *item);
void setupMenu(QMenu *addMenu, QAction *defaultAction, const QHash<QString, QAction *> &actions);
/** @brief The source file was modified, we will reload it soon, disable item in the meantime */
void setWaitingStatus(const QString &id);
const QString getDocumentProperty(const QString &key);
/** @brief A proxy clip was just created, pass it to the responsible item */
@@ -434,16 +248,16 @@ public:
/** @brief Give a number available for a clip id, used when adding a new clip to the project. Id must be unique */
int getFreeClipId();
/** @brief Give a number available for a folder id, used when adding a new folder to the project. Id must be unique */
int getFreeFolderId();
/** @brief Returns the id of the last inserted clip */
int lastClipId() const;
/** @brief Ask MLT to reload this clip's producer */
void reloadClip(const QString &id);
/** @brief Delete a folder */
void doRemoveFolder(const QString &id);
/** @brief Add a folder */
@@ -455,11 +269,11 @@ public:
void setupGeneratorMenu();
void startClipJob(const QStringList &params);
void addClipCut(const QString&id, int in, int out);
void removeClipCut(const QString&id, int in, int out);
void addClipCut(const QString &id, int in, int out);
void removeClipCut(const QString &id, int in, int out);
/** @brief Create the subclips defined in the parent clip. */
void loadSubClips(const QString&id, const QMap <QString,QString> data);
void loadSubClips(const QString &id, const QMap<QString, QString> &data);
/** @brief Set focus to the Bin view. */
void focusBinView() const;
@@ -485,12 +299,12 @@ public:
void deleteAllClipMarkers(const QString &id);
/** @brief Remove an effect from a bin clip. */
void removeEffect(const QString &id, const QDomElement &effect);
void moveEffect(const QString &id, const QList <int> &oldPos, const QList <int> &newPos);
void moveEffect(const QString &id, const QList<int> &oldPos, const QList<int> &newPos);
/** @brief Add an effect to a bin clip. */
void addEffect(const QString &id, QDomElement &effect);
/** @brief Update a bin clip effect. */
void updateEffect(const QString &id, QDomElement &effect, int ix, bool refreshStackWidget);
void changeEffectState(const QString &id, const QList <int>& indexes, bool disable, bool refreshStack);
void updateEffect(const QString &id, QDomElement &effect, int ix, bool refreshStackWidget, bool updateClip);
void changeEffectState(const QString &id, const QList<int> &indexes, bool disable, bool refreshStack);
/** @brief Edit an effect settings to a bin clip. */
void editMasterEffect(ClipController *ctl);
/** @brief An effect setting was changed, update stack if displayed. */
@@ -521,7 +335,7 @@ public:
QDockWidget *clipPropertiesDock();
/** @brief Returns a cached thumbnail. */
QImage findCachedPixmap(const QString &path);
void cachePixmap(const QString &path, QImage img);
void cachePixmap(const QString &path, const QImage &img);
/** @brief Returns a document's cache dir. ok is set to false if folder does not exist */
QDir getCacheDir(CacheType type, bool *ok) const;
/** @brief Command adding a bin clip */
@@ -530,9 +344,9 @@ public:
/** @brief Return a list of all clips hashes used in this project */
QStringList getProxyHashList();
/** @brief Get info (id, name) of a folder (or the currently selected one) */
const QStringList getFolderInfo(QModelIndex selectedIx = QModelIndex());
const QStringList getFolderInfo(const QModelIndex &selectedIx = QModelIndex());
/** @brief Save a clip zone as MLT playlist */
void saveZone(QStringList info, QDir dir);
void saveZone(const QStringList &info, const QDir &dir);
private slots:
void slotAddClip();
@@ -544,33 +358,34 @@ private slots:
void slotShowDescColumn(bool show);
/** @brief Setup the bin view type (icon view, tree view, ...).
* @param action The action whose data defines the view type or NULL to keep default view */
* @param action The action whose data defines the view type or nullptr to keep default view */
void slotInitView(QAction *action);
/** @brief Update status for clip jobs */
void slotUpdateJobStatus(const QString&, int, int, const QString &label = QString(), const QString &actionName = QString(), const QString &details = QString());
void slotUpdateJobStatus(const QString &, int, int, const QString &label = QString(), const QString &actionName = QString(), const QString &details = QString());
void slotSetIconSize(int size);
void rowsInserted(const QModelIndex &parent, int start, int end);
void rowsRemoved(const QModelIndex &parent, int start, int end);
void selectProxyModel(const QModelIndex &id);
void autoSelect();
void slotSaveHeaders();
void slotItemDropped(QStringList ids, const QModelIndex &parent);
void slotItemDropped(const QList<QUrl>&urls, const QModelIndex &parent);
void slotEffectDropped(QString effect, const QModelIndex &parent);
void slotUpdateEffect(QString id, QDomElement oldEffect, QDomElement newEffect, int ix);
void slotChangeEffectState(QString id, QList<int> indexes, bool disable);
void slotItemEdited(QModelIndex,QModelIndex,QVector<int>);
void slotAddUrl(QString url, int folderId, QMap <QString, QString> data = QMap <QString, QString>());
void slotAddUrl(QString url, QMap <QString, QString> data = QMap <QString, QString>());
void slotItemDropped(const QStringList &ids, const QModelIndex &parent);
void slotItemDropped(const QList<QUrl> &urls, const QModelIndex &parent);
void slotEffectDropped(const QString &effect, const QModelIndex &parent);
void slotUpdateEffect(QString id, QDomElement oldEffect, QDomElement newEffect, int ix, bool refreshStack = false, bool updateClip = true);
void slotChangeEffectState(QString id, const QList<int> &indexes, bool disable);
void slotItemEdited(const QModelIndex &, const QModelIndex &, const QVector<int> &);
void slotAddUrl(const QString &url, int folderId, const QMap<QString, QString> &data = QMap<QString, QString>());
void slotAddUrl(const QString &url, const QMap<QString, QString> &data = QMap<QString, QString>());
void slotPrepareJobsMenu();
void slotShowJobLog();
/** @brief process clip job result. */
void slotGotFilterJobResults(QString ,int , int, stringMap, stringMap);
void slotGotFilterJobResults(const QString &, int, int, const stringMap &, const stringMap &);
/** @brief Reset all text and log data from info message widget. */
void slotResetInfoMessage();
/** @brief Show dialog prompting for removal of invalid clips. */
void slotQueryRemoval(const QString &id, QUrl url, const QString &errorMessage);
void slotQueryRemoval(const QString &id, const QString &url, const QString &errorMessage);
/** @brief Request display of current clip in monitor. */
void slotOpenCurrent();
void slotZoomView(bool zoomIn);
@@ -578,12 +393,12 @@ private slots:
void slotGotFocus();
/** @brief Dis/Enable all bin effects. */
void slotDisableEffects(bool disable);
/** @brief Rename a Bin Folder. */
void slotRenameFolder();
/** @brief Rename a Bin Item. */
void slotRenameItem();
void slotCreateAudioThumbs();
void doRefreshPanel(const QString &id);
/** @brief Send audio thumb data to monitor for display. */
void slotSendAudioThumb(QString id);
void slotSendAudioThumb(const QString &id);
void doRefreshAudioThumbs(const QString &id);
/** @brief Enable item view and hide message */
void slotMessageActionTriggered();
@@ -600,10 +415,10 @@ public slots:
* @param id the clip id
* @param controller The Controller for this clip
*/
void slotProducerReady(requestClipInfo info, ClipController *controller);
void slotProducerReady(const requestClipInfo &info, ClipController *controller);
void slotRemoveInvalidClip(const QString &id, bool replace, const QString &errorMessage);
/** @brief Create a folder when opening a document */
void slotLoadFolders(QMap<QString,QString> foldersData);
void slotLoadFolders(const QMap<QString, QString> &foldersData);
/** @brief Reload clip thumbnail - when frame for thumbnail changed */
void slotRefreshClipThumbnail(const QString &id);
void slotDeleteClip();
@@ -617,50 +432,53 @@ public slots:
void slotStartCutJob(const QString &id);
/** @brief Triggered by a clip job action, start the job */
void slotStartClipJob(bool enable);
void slotEditClipCommand(const QString &id, QMap<QString, QString>oldProps, QMap<QString, QString>newProps);
void slotEditClipCommand(const QString &id, const QMap<QString, QString> &oldProps, const QMap<QString, QString> &newProps);
void slotCancelRunningJob(const QString &id, const QMap<QString, QString> &newProps);
/** @brief Start a filter job requested by a filter applied in timeline */
void slotStartFilterJob(const ItemInfo &info, const QString&id, QMap <QString, QString> &filterParams, QMap <QString, QString> &consumerParams, QMap <QString, QString> &extraParams);
void slotStartFilterJob(const ItemInfo &info, const QString &id, QMap<QString, QString> &filterParams, QMap<QString, QString> &consumerParams, QMap<QString, QString> &extraParams);
/** @brief Add a sub clip */
void slotAddClipCut(const QString&id, int in, int out);
void slotAddClipCut(const QString &id, int in, int out);
/** @brief Open current clip in an external editing application */
void slotOpenClip();
void slotAddClipMarker(const QString &id, QList <CommentedTime> newMarker, QUndoCommand *groupCommand = 0);
void slotAddClipMarker(const QString &id, const QList<CommentedTime> &newMarker, QUndoCommand *groupCommand = nullptr);
void slotLoadClipMarkers(const QString &id);
void slotSaveClipMarkers(const QString &id);
void slotDuplicateClip();
void slotLocateClip();
void slotDeleteEffect(const QString &id, QDomElement effect);
void slotMoveEffect(const QString &id, QList <int> currentPos, int newPos);
void slotMoveEffect(const QString &id, const QList<int> &currentPos, int newPos);
/** @brief Request audio thumbnail for clip with id */
void slotCreateAudioThumb(const QString &id);
/** @brief Abort audio thumbnail for clip with id */
void slotAbortAudioThumb(const QString &id, long duration);
/** @brief Add extra data to a clip. */
void slotAddClipExtraData(const QString &id, const QString &key, const QString &data = QString(), QUndoCommand *groupCommand = 0);
void slotUpdateClipProperties(const QString &id, QMap <QString, QString> properties, bool refreshPropertiesPanel);
void slotAddClipExtraData(const QString &id, const QString &key, const QString &data = QString(), QUndoCommand *groupCommand = nullptr);
void slotUpdateClipProperties(const QString &id, const QMap<QString, QString> &properties, bool refreshPropertiesPanel);
/** @brief Pass some important properties to timeline track producers. */
void updateTimelineProducers(const QString &id, QMap <QString, QString> passProperties);
void updateTimelineProducers(const QString &id, const QMap<QString, QString> &passProperties);
/** @brief Add effect to active Bin clip (used when double clicking an effect in list). */
void slotEffectDropped(QString id, QDomElement);
/** @brief Request current frame from project monitor. */
void slotGetCurrentProjectImage(bool request);
void slotExpandUrl(ItemInfo info, QUrl url, QUndoCommand *command);
/** @brief Request current frame from project monitor.
* @param clipId is the id of a clip we want to hide from screenshot
* @param request true to start capture process, false to end it. It is necessary to emit a false after image is received
**/
void slotGetCurrentProjectImage(const QString &clipId, bool request);
void slotExpandUrl(const ItemInfo &info, const QString &url, QUndoCommand *command);
void abortAudioThumbs();
/** @brief Abort all ongoing operations to prepare close. */
void abortOperations();
void doDisplayMessage(const QString &text, KMessageWidget::MessageType type, QList <QAction*> actions = QList <QAction*>());
void doDisplayMessage(const QString &text, KMessageWidget::MessageType type, const QList<QAction *> &actions = QList<QAction *>());
/** @brief Reset all clip usage to 0 */
void resetUsageCount();
/** @brief Select a clip in the Bin from its id. */
/** @brief Select a clip in the Bin from its id. */
void selectClipById(const QString &id, int frame = -1, const QPoint &zone = QPoint());
void slotAddClipToProject(QUrl url);
void slotAddClipToProject(const QUrl &url);
void doUpdateThumbsProgress(long ms);
void droppedUrls(QList <QUrl> urls, const QStringList &folderInfo = QStringList());
void droppedUrls(const QList<QUrl> &urls, const QStringList &folderInfo = QStringList());
protected:
void contextMenuEvent(QContextMenuEvent *event);
bool eventFilter(QObject *obj, QEvent *event);
void contextMenuEvent(QContextMenuEvent *event) Q_DECL_OVERRIDE;
bool eventFilter(QObject *obj, QEvent *event) Q_DECL_OVERRIDE;
private:
ProjectItemModel *m_itemModel;
@@ -672,7 +490,7 @@ private:
ProjectSortProxyModel *m_proxyModel;
JobManager *m_jobManager;
QToolBar *m_toolbar;
KdenliveDoc* m_doc;
KdenliveDoc *m_doc;
QLineEdit *m_searchLine;
QToolButton *m_addButton;
QMenu *m_extractAudioAction;
@@ -705,7 +523,7 @@ private:
QAction *m_locateAction;
QAction *m_proxyAction;
QAction *m_deleteAction;
QAction *m_renameFolderAction;
QAction *m_renameAction;
QMenu *m_jobsMenu;
QAction *m_cancelJobs;
QAction *m_discardCurrentClipJobs;
@@ -738,13 +556,13 @@ private:
void processAudioThumbs();
signals:
void itemUpdated(AbstractProjectItem*);
void itemUpdated(AbstractProjectItem *);
void producerReady(const QString &id);
/** @brief Save folder info into MLT. */
void storeFolder(QString folderId, QString parentId, QString oldParentId, QString folderName);
void gotFilterJobResults(QString,int,int,stringMap,stringMap);
void storeFolder(const QString &folderId, const QString &parentId, const QString &oldParentId, const QString &folderName);
void gotFilterJobResults(const QString &, int, int, stringMap, stringMap);
/** @brief The clip was changed and thumbnail needs a refresh. */
void clipNeedsReload(const QString &,bool);
void clipNeedsReload(const QString &, bool);
/** @brief Trigger timecode format refresh where needed. */
void refreshTimeCode();
/** @brief Request display of effect stack for a Bin clip. */
@@ -753,13 +571,13 @@ signals:
void masterClipUpdated(ClipController *, Monitor *);
void displayBinMessage(const QString &, KMessageWidget::MessageType);
void displayMessage(const QString &, int, MessageType);
void requesteInvalidRemoval(const QString &, QUrl, const QString &);
void requesteInvalidRemoval(const QString &, const QString &, const QString &);
/** @brief Markers changed, refresh panel. */
void refreshPanelMarkers();
/** @brief Analysis data changed, refresh panel. */
void updateAnalysisData(const QString &);
void openClip(ClipController *c, int in = -1, int out = -1);
/** @brief Fill context menu with occurences of this clip in timeline. */
/** @brief Fill context menu with occurrences of this clip in timeline. */
void findInTimeline(const QString &);
void clipNameChanged(const QString &);
/** @brief A clip was updated, request panel update. */

View File

@@ -24,40 +24,44 @@
#include <klocalizedstring.h>
AddBinFolderCommand::AddBinFolderCommand(Bin *bin, const QString &id, const QString &name, const QString &parentId, bool remove, QUndoCommand *parent) :
QUndoCommand(parent),
m_bin(bin),
m_id(id),
m_name(name),
m_parentId(parentId),
m_remove(remove)
QUndoCommand(parent),
m_bin(bin),
m_id(id),
m_name(name),
m_parentId(parentId),
m_remove(remove)
{
if (remove) setText(i18n("Remove Folder"));
else setText(i18n("Add Folder"));
if (remove) {
setText(i18n("Remove Folder"));
} else {
setText(i18n("Add Folder"));
}
}
// virtual
void AddBinFolderCommand::undo()
{
if (m_remove)
if (m_remove) {
m_bin->doAddFolder(m_id, m_name, m_parentId);
else
} else {
m_bin->doRemoveFolder(m_id);
}
}
// virtual
void AddBinFolderCommand::redo()
{
if (m_remove)
if (m_remove) {
m_bin->doRemoveFolder(m_id);
else
} else {
m_bin->doAddFolder(m_id, m_name, m_parentId);
}
}
MoveBinClipCommand::MoveBinClipCommand(Bin *bin, const QString &clipId, const QString &oldParentId, const QString &newParentId, QUndoCommand *parent) :
QUndoCommand(parent),
m_bin(bin),
m_clipId(clipId),
m_oldParentId(oldParentId),
m_newParentId(newParentId)
QUndoCommand(parent),
m_bin(bin),
m_clipId(clipId),
m_oldParentId(oldParentId),
m_newParentId(newParentId)
{
setText(i18n("Move Clip"));
}
@@ -73,11 +77,11 @@ void MoveBinClipCommand::redo()
}
MoveBinFolderCommand::MoveBinFolderCommand(Bin *bin, const QString &clipId, const QString &oldParentId, const QString &newParentId, QUndoCommand *parent) :
QUndoCommand(parent),
m_bin(bin),
m_clipId(clipId),
m_oldParentId(oldParentId),
m_newParentId(newParentId)
QUndoCommand(parent),
m_bin(bin),
m_clipId(clipId),
m_oldParentId(oldParentId),
m_newParentId(newParentId)
{
setText(i18n("Move Clip"));
}
@@ -93,11 +97,11 @@ void MoveBinFolderCommand::redo()
}
RenameBinFolderCommand::RenameBinFolderCommand(Bin *bin, const QString &folderId, const QString &newName, const QString &oldName, QUndoCommand *parent) :
QUndoCommand(parent),
m_bin(bin),
m_clipId(folderId),
m_oldName(oldName),
m_newName(newName)
QUndoCommand(parent),
m_bin(bin),
m_clipId(folderId),
m_oldName(oldName),
m_newName(newName)
{
setText(i18n("Rename Folder"));
}
@@ -113,10 +117,10 @@ void RenameBinFolderCommand::redo()
}
AddBinEffectCommand::AddBinEffectCommand(Bin *bin, const QString &clipId, QDomElement &effect, QUndoCommand *parent) :
QUndoCommand(parent),
m_bin(bin),
m_clipId(clipId),
m_effect(effect)
QUndoCommand(parent),
m_bin(bin),
m_clipId(clipId),
m_effect(effect)
{
setText(i18n("Add Bin Effect"));
}
@@ -132,10 +136,10 @@ void AddBinEffectCommand::redo()
}
RemoveBinEffectCommand::RemoveBinEffectCommand(Bin *bin, const QString &clipId, QDomElement &effect, QUndoCommand *parent) :
QUndoCommand(parent),
m_bin(bin),
m_clipId(clipId),
m_effect(effect)
QUndoCommand(parent),
m_bin(bin),
m_clipId(clipId),
m_effect(effect)
{
setText(i18n("Remove Bin Effect"));
}
@@ -150,41 +154,43 @@ void RemoveBinEffectCommand::redo()
m_bin->removeEffect(m_clipId, m_effect);
}
UpdateBinEffectCommand::UpdateBinEffectCommand(Bin *bin, const QString &clipId, QDomElement &oldEffect, QDomElement &newEffect, int ix, QUndoCommand *parent) :
QUndoCommand(parent),
m_bin(bin),
m_clipId(clipId),
m_oldEffect(oldEffect),
m_newEffect(newEffect),
m_ix(ix),
m_refreshStack(false)
UpdateBinEffectCommand::UpdateBinEffectCommand(Bin *bin, const QString &clipId, QDomElement &oldEffect, QDomElement &newEffect, int ix, bool refreshStack, bool updateClip, QUndoCommand *parent) :
QUndoCommand(parent),
m_bin(bin),
m_clipId(clipId),
m_oldEffect(oldEffect),
m_newEffect(newEffect),
m_ix(ix),
m_refreshStack(refreshStack),
m_updateClip(updateClip)
{
setText(i18n("Edit Bin Effect"));
}
// virtual
void UpdateBinEffectCommand::undo()
{
m_bin->updateEffect(m_clipId, m_oldEffect, m_ix, m_refreshStack);
m_bin->updateEffect(m_clipId, m_oldEffect, m_ix, m_refreshStack, m_updateClip);
}
// virtual
void UpdateBinEffectCommand::redo()
{
m_bin->updateEffect(m_clipId, m_newEffect, m_ix, m_refreshStack);
m_bin->updateEffect(m_clipId, m_newEffect, m_ix, m_refreshStack, m_updateClip);
m_refreshStack = true;
}
ChangeMasterEffectStateCommand::ChangeMasterEffectStateCommand(Bin *bin, const QString &clipId, const QList <int>& effectIndexes, bool disable, QUndoCommand *parent) :
QUndoCommand(parent),
m_bin(bin),
m_clipId(clipId),
m_effectIndexes(effectIndexes),
m_disable(disable),
m_refreshEffectStack(false)
ChangeMasterEffectStateCommand::ChangeMasterEffectStateCommand(Bin *bin, const QString &clipId, const QList<int> &effectIndexes, bool disable, QUndoCommand *parent) :
QUndoCommand(parent),
m_bin(bin),
m_clipId(clipId),
m_effectIndexes(effectIndexes),
m_disable(disable),
m_refreshEffectStack(false)
{
if (disable)
if (disable) {
setText(i18np("Disable effect", "Disable effects", effectIndexes.count()));
else
} else {
setText(i18np("Enable effect", "Enable effects", effectIndexes.count()));
}
}
// virtual
@@ -195,16 +201,17 @@ void ChangeMasterEffectStateCommand::undo()
// virtual
void ChangeMasterEffectStateCommand::redo()
{
m_bin->changeEffectState(m_clipId, m_effectIndexes, m_disable, m_refreshEffectStack);
m_refreshEffectStack = true;
m_bin->changeEffectState(m_clipId, m_effectIndexes, m_disable, m_refreshEffectStack);
m_refreshEffectStack = true;
}
MoveBinEffectCommand::MoveBinEffectCommand(Bin *bin, const QString &clipId, QList <int> oldPos, int newPos, QUndoCommand *parent) :
QUndoCommand(parent),
m_bin(bin),
m_clipId(clipId),
m_oldindex(oldPos)
MoveBinEffectCommand::MoveBinEffectCommand(Bin *bin, const QString &clipId, const QList<int> &oldPos, int newPos, QUndoCommand *parent) :
QUndoCommand(parent),
m_bin(bin),
m_clipId(clipId),
m_oldindex(oldPos)
{
m_newindex.reserve(m_oldindex.count());
for (int i = 0; i < m_oldindex.count(); ++i) {
m_newindex << newPos + i;
}
@@ -223,13 +230,13 @@ void MoveBinEffectCommand::redo()
}
RenameBinSubClipCommand::RenameBinSubClipCommand(Bin *bin, const QString &clipId, const QString &newName, const QString &oldName, int in, int out, QUndoCommand *parent) :
QUndoCommand(parent),
m_bin(bin),
m_clipId(clipId),
m_oldName(oldName),
m_newName(newName),
m_in(in),
m_out(out)
QUndoCommand(parent),
m_bin(bin),
m_clipId(clipId),
m_oldName(oldName),
m_newName(newName),
m_in(in),
m_out(out)
{
setText(i18n("Rename Zone"));
}
@@ -244,7 +251,6 @@ void RenameBinSubClipCommand::redo()
m_bin->renameSubClip(m_clipId, m_newName, m_oldName, m_in, m_out);
}
AddBinClipCutCommand::AddBinClipCutCommand(Bin *bin, const QString &clipId, int in, int out, bool add, QUndoCommand *parent) :
QUndoCommand(parent)
, m_bin(bin)
@@ -261,8 +267,7 @@ void AddBinClipCutCommand::undo()
{
if (m_addCut) {
m_bin->removeClipCut(m_clipId, m_in, m_out);
}
else {
} else {
m_bin->addClipCut(m_clipId, m_in, m_out);
}
}
@@ -271,20 +276,19 @@ void AddBinClipCutCommand::redo()
{
if (m_addCut) {
m_bin->addClipCut(m_clipId, m_in, m_out);
}
else {
} else {
m_bin->removeClipCut(m_clipId, m_in, m_out);
}
}
EditClipCommand::EditClipCommand(Bin *bin, const QString &id, const QMap <QString, QString> &oldparams, const QMap <QString, QString> &newparams, bool doIt, QUndoCommand * parent) :
QUndoCommand(parent),
m_bin(bin),
m_oldparams(oldparams),
m_newparams(newparams),
m_id(id),
m_doIt(doIt),
m_firstExec(true)
EditClipCommand::EditClipCommand(Bin *bin, const QString &id, const QMap<QString, QString> &oldparams, const QMap<QString, QString> &newparams, bool doIt, QUndoCommand *parent) :
QUndoCommand(parent),
m_bin(bin),
m_oldparams(oldparams),
m_newparams(newparams),
m_id(id),
m_doIt(doIt),
m_firstExec(true)
{
setText(i18n("Edit clip"));
}
@@ -296,35 +300,41 @@ void EditClipCommand::undo()
// virtual
void EditClipCommand::redo()
{
if (m_doIt)
if (m_doIt) {
m_bin->slotUpdateClipProperties(m_id, m_newparams, !m_firstExec);
}
m_doIt = true;
m_firstExec = false;
}
AddClipCommand::AddClipCommand(Bin *bin, const QDomElement &xml, const QString &id, bool doIt, QUndoCommand * parent) :
QUndoCommand(parent),
m_bin(bin),
m_xml(xml),
m_id(id),
m_doIt(doIt)
AddClipCommand::AddClipCommand(Bin *bin, const QDomElement &xml, const QString &id, bool doIt, QUndoCommand *parent) :
QUndoCommand(parent),
m_bin(bin),
m_xml(xml),
m_id(id),
m_doIt(doIt)
{
if (doIt) setText(i18n("Add clip"));
else setText(i18n("Delete clip"));
if (doIt) {
setText(i18n("Add clip"));
} else {
setText(i18n("Delete clip"));
}
}
// virtual
void AddClipCommand::undo()
{
if (m_doIt)
if (m_doIt) {
m_bin->deleteClip(m_id);
else
} else {
m_bin->addClip(m_xml, m_id);
}
}
// virtual
void AddClipCommand::redo()
{
if (m_doIt)
if (m_doIt) {
m_bin->addClip(m_xml, m_id);
else
} else {
m_bin->deleteClip(m_id);
}
}

View File

@@ -17,7 +17,6 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
#ifndef BINCOMMANDS_H
#define BINCOMMANDS_H
@@ -27,13 +26,12 @@
class Bin;
class AddBinFolderCommand : public QUndoCommand
{
public:
explicit AddBinFolderCommand(Bin *bin, const QString &id, const QString &name, const QString &parentId, bool remove = false, QUndoCommand * parent = 0);
void undo();
void redo();
explicit AddBinFolderCommand(Bin *bin, const QString &id, const QString &name, const QString &parentId, bool remove = false, QUndoCommand *parent = nullptr);
void undo() Q_DECL_OVERRIDE;
void redo() Q_DECL_OVERRIDE;
private:
Bin *m_bin;
QString m_id;
@@ -42,13 +40,12 @@ private:
bool m_remove;
};
class MoveBinClipCommand : public QUndoCommand
{
public:
explicit MoveBinClipCommand(Bin *bin, const QString &clipId, const QString &oldParentId, const QString &newParentId, QUndoCommand *parent = 0);
void undo();
void redo();
explicit MoveBinClipCommand(Bin *bin, const QString &clipId, const QString &oldParentId, const QString &newParentId, QUndoCommand *parent = nullptr);
void undo() Q_DECL_OVERRIDE;
void redo() Q_DECL_OVERRIDE;
private:
Bin *m_bin;
QString m_clipId;
@@ -59,9 +56,9 @@ private:
class MoveBinFolderCommand : public QUndoCommand
{
public:
explicit MoveBinFolderCommand(Bin *bin, const QString &clipId, const QString &oldParentId, const QString &newParentId, QUndoCommand *parent = 0);
void undo();
void redo();
explicit MoveBinFolderCommand(Bin *bin, const QString &clipId, const QString &oldParentId, const QString &newParentId, QUndoCommand *parent = nullptr);
void undo() Q_DECL_OVERRIDE;
void redo() Q_DECL_OVERRIDE;
private:
Bin *m_bin;
QString m_clipId;
@@ -72,9 +69,9 @@ private:
class RenameBinFolderCommand : public QUndoCommand
{
public:
explicit RenameBinFolderCommand(Bin *bin, const QString &folderId, const QString &newName, const QString &oldName, QUndoCommand *parent = 0);
void undo();
void redo();
explicit RenameBinFolderCommand(Bin *bin, const QString &folderId, const QString &newName, const QString &oldName, QUndoCommand *parent = nullptr);
void undo() Q_DECL_OVERRIDE;
void redo() Q_DECL_OVERRIDE;
private:
Bin *m_bin;
QString m_clipId;
@@ -85,9 +82,9 @@ private:
class AddBinEffectCommand : public QUndoCommand
{
public:
explicit AddBinEffectCommand(Bin *bin, const QString &clipId, QDomElement &effect, QUndoCommand *parent = 0);
void undo();
void redo();
explicit AddBinEffectCommand(Bin *bin, const QString &clipId, QDomElement &effect, QUndoCommand *parent = nullptr);
void undo() Q_DECL_OVERRIDE;
void redo() Q_DECL_OVERRIDE;
private:
Bin *m_bin;
QString m_clipId;
@@ -97,9 +94,9 @@ private:
class RemoveBinEffectCommand : public QUndoCommand
{
public:
explicit RemoveBinEffectCommand(Bin *bin, const QString &clipId, QDomElement &effect, QUndoCommand *parent = 0);
void undo();
void redo();
explicit RemoveBinEffectCommand(Bin *bin, const QString &clipId, QDomElement &effect, QUndoCommand *parent = nullptr);
void undo() Q_DECL_OVERRIDE;
void redo() Q_DECL_OVERRIDE;
private:
Bin *m_bin;
QString m_clipId;
@@ -109,9 +106,9 @@ private:
class UpdateBinEffectCommand : public QUndoCommand
{
public:
explicit UpdateBinEffectCommand(Bin *bin, const QString &clipId, QDomElement &oldEffect, QDomElement &newEffect, int ix, QUndoCommand *parent = 0);
void undo();
void redo();
explicit UpdateBinEffectCommand(Bin *bin, const QString &clipId, QDomElement &oldEffect, QDomElement &newEffect, int ix, bool refreshStack, bool updateClip, QUndoCommand *parent = nullptr);
void undo() Q_DECL_OVERRIDE;
void redo() Q_DECL_OVERRIDE;
private:
Bin *m_bin;
QString m_clipId;
@@ -119,18 +116,19 @@ private:
QDomElement m_newEffect;
int m_ix;
bool m_refreshStack;
bool m_updateClip;
};
class ChangeMasterEffectStateCommand : public QUndoCommand
{
public:
ChangeMasterEffectStateCommand(Bin *bin, const QString &clipId, const QList <int>& effectIndexes, bool disable, QUndoCommand *parent = 0);
void undo();
void redo();
ChangeMasterEffectStateCommand(Bin *bin, const QString &clipId, const QList<int> &effectIndexes, bool disable, QUndoCommand *parent = nullptr);
void undo() Q_DECL_OVERRIDE;
void redo() Q_DECL_OVERRIDE;
private:
Bin *m_bin;
QString m_clipId;
QList <int> m_effectIndexes;
QList<int> m_effectIndexes;
bool m_disable;
bool m_refreshEffectStack;
};
@@ -138,22 +136,22 @@ private:
class MoveBinEffectCommand : public QUndoCommand
{
public:
explicit MoveBinEffectCommand(Bin *bin, const QString &clipId, QList <int> oldPos, int newPos, QUndoCommand *parent = 0);
void undo();
void redo();
explicit MoveBinEffectCommand(Bin *bin, const QString &clipId, const QList<int> &oldPos, int newPos, QUndoCommand *parent = nullptr);
void undo() Q_DECL_OVERRIDE;
void redo() Q_DECL_OVERRIDE;
private:
Bin *m_bin;
QString m_clipId;
QList <int> m_oldindex;
QList <int> m_newindex;
QList<int> m_oldindex;
QList<int> m_newindex;
};
class RenameBinSubClipCommand : public QUndoCommand
{
public:
explicit RenameBinSubClipCommand(Bin *bin, const QString &clipId, const QString &newName, const QString &oldName, int in, int out, QUndoCommand *parent = 0);
void undo();
void redo();
explicit RenameBinSubClipCommand(Bin *bin, const QString &clipId, const QString &newName, const QString &oldName, int in, int out, QUndoCommand *parent = nullptr);
void undo() Q_DECL_OVERRIDE;
void redo() Q_DECL_OVERRIDE;
private:
Bin *m_bin;
QString m_clipId;
@@ -166,9 +164,9 @@ private:
class AddBinClipCutCommand : public QUndoCommand
{
public:
explicit AddBinClipCutCommand(Bin *bin, const QString &clipId, int in, int out, bool add, QUndoCommand *parent = 0);
void undo();
void redo();
explicit AddBinClipCutCommand(Bin *bin, const QString &clipId, int in, int out, bool add, QUndoCommand *parent = nullptr);
void undo() Q_DECL_OVERRIDE;
void redo() Q_DECL_OVERRIDE;
private:
Bin *m_bin;
QString m_clipId;
@@ -180,18 +178,18 @@ private:
class EditClipCommand : public QUndoCommand
{
public:
EditClipCommand(Bin *bin, const QString &id, const QMap <QString, QString> &oldparams, const QMap <QString, QString> &newparams, bool doIt, QUndoCommand * parent = 0);
void undo();
void redo();
EditClipCommand(Bin *bin, const QString &id, const QMap<QString, QString> &oldparams, const QMap<QString, QString> &newparams, bool doIt, QUndoCommand *parent = nullptr);
void undo() Q_DECL_OVERRIDE;
void redo() Q_DECL_OVERRIDE;
private:
Bin *m_bin;
QMap <QString, QString> m_oldparams;
QMap <QString, QString> m_newparams;
QMap<QString, QString> m_oldparams;
QMap<QString, QString> m_newparams;
QString m_id;
/** @brief Should this command be executed on first redo ? TODO: we should refactor the code to get rid of this and always execute actions through the command system.
*. */
bool m_doIt;
/** @brief This value is true is this is the first time we execute the command, false otherwise. This allows us to refresh the properties panel
/** @brief This value is true is this is the first time we execute the command, false otherwise. This allows us to refresh the properties panel
* only on the later executions of the command, since on the first execution, the properties panel already contains the correct info. */
bool m_firstExec;
};
@@ -199,9 +197,9 @@ private:
class AddClipCommand : public QUndoCommand
{
public:
AddClipCommand(Bin *bin, const QDomElement &xml, const QString &id, bool doIt, QUndoCommand * parent = 0);
void undo();
void redo();
AddClipCommand(Bin *bin, const QDomElement &xml, const QString &id, bool doIt, QUndoCommand *parent = nullptr);
void undo() Q_DECL_OVERRIDE;
void redo() Q_DECL_OVERRIDE;
private:
Bin *m_bin;
QDomElement m_xml;
@@ -209,6 +207,5 @@ private:
bool m_doIt;
};
#endif

Some files were not shown because too many files have changed in this diff Show More