Compare commits

...

314 Commits

Author SHA1 Message Date
Jean-Baptiste Mardelle
600fea903e get ready for 0.7.2 release
svn path=/branches/KDE4/; revision=3025
2009-02-01 15:48:37 +00:00
Jean-Baptiste Mardelle
d9535b846b Fix spacer and group move sometimes moving clips to wrong place:
http://www.kdenlive.org:80/mantis/view.php?id=604

svn path=/branches/KDE4/; revision=3024
2009-02-01 13:42:54 +00:00
Kálmán Szalai
a7fea23596 Updated Hungarian translation of KDE4 line
svn path=/branches/KDE4/; revision=3022
2009-02-01 06:59:36 +00:00
Kálmán Szalai
2eee7e650e Move Hungarian translation to right name.
svn path=/branches/KDE4/; revision=3021
2009-02-01 05:05:26 +00:00
Jean-Baptiste Mardelle
e90ba73f88 Cleanup nepomuk rating display
svn path=/branches/KDE4/; revision=3020
2009-01-31 23:04:00 +00:00
Jean-Baptiste Mardelle
35ff94d85a Show Nepomuk rating in appropriate column
svn path=/branches/KDE4/; revision=3019
2009-01-31 22:44:09 +00:00
Jean-Baptiste Mardelle
4b9ba168de cleanup
svn path=/branches/KDE4/; revision=3018
2009-01-31 22:26:17 +00:00
Jean-Baptiste Mardelle
3644bf4707 Fix playlist corruption when resizing clip end in middle of a track
svn path=/branches/KDE4/; revision=3017
2009-01-31 22:25:03 +00:00
Jean-Baptiste Mardelle
c5e08a138d Another fix to the spacer tool
svn path=/branches/KDE4/; revision=3016
2009-01-31 21:34:15 +00:00
Jean-Baptiste Mardelle
7dd8568550 Remember last directory for opening a project:
http://www.kdenlive.org:80/mantis/view.php?id=640

svn path=/branches/KDE4/; revision=3015
2009-01-31 20:10:58 +00:00
Jean-Baptiste Mardelle
accde60a20 Fix project list icon aspect ratio, small cleanup
svn path=/branches/KDE4/; revision=3014
2009-01-31 17:07:00 +00:00
Jean-Baptiste Mardelle
2afedd7e86 indentation fixes
svn path=/branches/KDE4/; revision=3013
2009-01-31 15:12:56 +00:00
Jean-Baptiste Mardelle
890932ce1f * Fix possible crash when creating new document
* Add "Cancel" button that will abort loading when opening a project with missing clips:
http://www.kdenlive.org:80/mantis/view.php?id=622

svn path=/branches/KDE4/; revision=3012
2009-01-31 15:03:15 +00:00
Jean-Baptiste Mardelle
b8c9e129f0 Fix video clip thumbnails not showing up when enabling them
svn path=/branches/KDE4/; revision=3011
2009-01-31 12:33:37 +00:00
Jean-Baptiste Mardelle
cc61d92399 Render jobs: when the Kdenlive window is closed, try to reconnect to another Kdenlive window to display rendering progress
svn path=/branches/KDE4/; revision=3010
2009-01-31 10:03:11 +00:00
Jean-Baptiste Mardelle
58c916cb77 Try to make sure we don't add a transition over an existing one
svn path=/branches/KDE4/; revision=3009
2009-01-31 01:34:24 +00:00
Jean-Baptiste Mardelle
f35687ff26 Fix several spacer issue (not all clips moved and track changed)
svn path=/branches/KDE4/; revision=3008
2009-01-31 00:29:37 +00:00
Marcelo Soares Souza
225b9a9842 fixes in pt_BR translation
svn path=/branches/KDE4/; revision=3007
2009-01-29 20:03:12 +00:00
Simon A. Eugster
1e544d450d Translation by Amir Sher
svn path=/branches/KDE4/; revision=3006
2009-01-29 19:16:17 +00:00
Jean-Baptiste Mardelle
1dd9da542f Remove problematic character in ui file
svn path=/branches/KDE4/; revision=3005
2009-01-29 16:32:23 +00:00
Jean-Baptiste Mardelle
f3021466cf Updated translation file. Should be the last changes for the 0.7.2 release
svn path=/branches/KDE4/; revision=3004
2009-01-29 16:25:53 +00:00
Jean-Baptiste Mardelle
219e941dc0 * Comment out rendering log stuff, the important info should now be displayed in Kdenlive's running job widget
* Don't emit progress if there was none

svn path=/branches/KDE4/; revision=3003
2009-01-29 16:10:43 +00:00
Jean-Baptiste Mardelle
be792d35a9 Fix rendering remain time display
svn path=/branches/KDE4/; revision=3002
2009-01-29 16:08:35 +00:00
Jean-Baptiste Mardelle
17b33c2187 Display timing info in rendering jog widget
svn path=/branches/KDE4/; revision=3001
2009-01-29 15:09:35 +00:00
Jean-Baptiste Mardelle
433ca07e9c Open website upload page after rendering from a website profile if user wants it
svn path=/branches/KDE4/; revision=3000
2009-01-29 12:39:54 +00:00
Jean-Baptiste Mardelle
3869e41922 * Disable resizing for rendering profile that need a fixed size as suggested by Dan
* From now on, it is not necessary to add the s=%widthx%height to the profile, it gets added automatically at render time

svn path=/branches/KDE4/; revision=2999
2009-01-29 12:17:53 +00:00
Jean-Baptiste Mardelle
20b7b7fab5 Add PulseAudio to the list of SDL audio drivers:
http://www.kdenlive.org:80/mantis/view.php?id=625

svn path=/branches/KDE4/; revision=2998
2009-01-29 11:52:52 +00:00
Jean-Baptiste Mardelle
2ff5270c56 Fix linking error (undefined reference to `ThumbCreator::~ThumbCreator())
svn path=/branches/KDE4/; revision=2997
2009-01-27 23:03:48 +00:00
Jean-Baptiste Mardelle
6aa5f54583 remove useless header
svn path=/branches/KDE4/; revision=2996
2009-01-27 23:01:36 +00:00
Jean-Baptiste Mardelle
ce87c923bd dvd wizard: small ui improvements, warn on file overwrite
svn path=/branches/KDE4/; revision=2995
2009-01-27 22:22:54 +00:00
Jean-Baptiste Mardelle
485ab5f810 less debug
svn path=/branches/KDE4/; revision=2994
2009-01-27 21:32:10 +00:00
Jean-Baptiste Mardelle
49d8dd6edc * Small updates to composite transition
* Use composite transition by default for transparent clips (title, images), allows easier fading

svn path=/branches/KDE4/; revision=2993
2009-01-27 21:11:33 +00:00
Jean-Michel Poure
78958a039d Update French translation
svn path=/branches/KDE4/; revision=2992
2009-01-27 20:13:12 +00:00
Jean-Baptiste Mardelle
21cecb0709 Some config dialog cleanup
svn path=/branches/KDE4/; revision=2991
2009-01-27 19:56:42 +00:00
Simon A. Eugster
64c337496e Track of clips won't be changed anymore when using the spacer tool; this occurs in some strange cases. See comment in the code. http://www.kdenlive.org/mantis/view.php?id=604
svn path=/branches/KDE4/; revision=2990
2009-01-27 18:41:59 +00:00
Jean-Baptiste Mardelle
e307ce736b Now that we can track jobs within Kdenlive, add new config option to enable/disable use of KDE job view tracker to monitor rendering jobs (disabled by default).
svn path=/branches/KDE4/; revision=2989
2009-01-27 16:52:24 +00:00
Jean-Baptiste Mardelle
be49eff2cf Remember & save monitor zone for each clip:
http://www.kdenlive.org:80/mantis/view.php?id=517

svn path=/branches/KDE4/; revision=2988
2009-01-27 16:45:28 +00:00
Mads Bondo Dydensborg
858140d9a8 Removed dead member, added single debug line, adding an assertion
svn path=/branches/KDE4/; revision=2985
2009-01-27 10:42:20 +00:00
Mads Bondo Dydensborg
b38510586e Added minor comment to function
svn path=/branches/KDE4/; revision=2984
2009-01-27 10:40:21 +00:00
Simon A. Eugster
f894184fa3 (debug)
svn path=/branches/KDE4/; revision=2980
2009-01-26 21:04:29 +00:00
Simon A. Eugster
ec3043abee File extension is now added automatically when the user selects a file in the file dialog. http://www.kdenlive.org/mantis/view.php?id=617
svn path=/branches/KDE4/; revision=2979
2009-01-26 20:38:13 +00:00
Simon A. Eugster
2474e47a48 Translations added
svn path=/branches/KDE4/; revision=2978
2009-01-26 19:17:20 +00:00
Simon A. Eugster
3a12d3e127 DVD uppercase
svn path=/branches/KDE4/; revision=2977
2009-01-26 19:15:07 +00:00
Simon A. Eugster
b3a3175167 Consistent messages: Same text not translated twice anymore
svn path=/branches/KDE4/; revision=2976
2009-01-26 19:11:46 +00:00
Simon A. Eugster
ed46de1c19 dB instead of db
svn path=/branches/KDE4/; revision=2975
2009-01-26 18:56:11 +00:00
Simon A. Eugster
360700e911 Fixed part of bug 617: Adding file extension automatically in the Rendering dialog. When there was no extension, only a . has been added when clicking the first time. http://www.kdenlive.org/mantis/view.php?id=617
svn path=/branches/KDE4/; revision=2974
2009-01-26 18:48:08 +00:00
Simon A. Eugster
91dffb6851 Some debug lines for examing bug in spacer tool, will remove them again later.
svn path=/branches/KDE4/; revision=2973
2009-01-26 18:44:09 +00:00
Simon A. Eugster
af4b0d4671 Fixed: Correct display of new size (320x240 instead of 3202x40)
svn path=/branches/KDE4/; revision=2972
2009-01-26 18:38:35 +00:00
Jean-Michel Poure
1004cbd257 Fix French string
svn path=/branches/KDE4/; revision=2971
2009-01-26 13:05:14 +00:00
Jean-Baptiste Mardelle
6a7a99fc22 Check the system for dvd authoring programs
svn path=/branches/KDE4/; revision=2970
2009-01-26 12:15:20 +00:00
Jean-Baptiste Mardelle
f100c6b550 Remove invalid playlist entries on loading
svn path=/branches/KDE4/; revision=2969
2009-01-26 11:27:05 +00:00
Jean-Michel Poure
56e1fd4cd7 French translation
svn path=/branches/KDE4/; revision=2968
2009-01-26 10:32:18 +00:00
Jean-Michel Poure
f550e2b889 French translation
svn path=/branches/KDE4/; revision=2967
2009-01-26 10:31:50 +00:00
Jean-Michel Poure
2b230f24b2 French translation update
svn path=/branches/KDE4/; revision=2966
2009-01-26 08:59:04 +00:00
Jean-Michel Poure
03a2e90863 French translation update
svn path=/branches/KDE4/; revision=2965
2009-01-26 08:42:20 +00:00
Jean-Michel Poure
d6e55c3ede Fix duplicate entry, rename Phase in as Phase In with capital letter.
svn path=/branches/KDE4/; revision=2964
2009-01-26 08:36:59 +00:00
Jean-Michel Poure
3192e15250 French translation update'
svn path=/branches/KDE4/; revision=2963
2009-01-26 08:29:47 +00:00
Jean-Baptiste Mardelle
fe628bfda1 Fix monitor refresh loop when seeking to zone start or end points
svn path=/branches/KDE4/; revision=2962
2009-01-25 21:04:40 +00:00
Jean-Baptiste Mardelle
49bda92823 * Cleanup folder creation
* save & restore all folders (including empty ones):
http://www.kdenlive.org:80/mantis/view.php?id=611

svn path=/branches/KDE4/; revision=2961
2009-01-25 19:38:10 +00:00
Simon A. Eugster
a44557c748 Debug line added
svn path=/branches/KDE4/; revision=2960
2009-01-25 18:49:32 +00:00
Simon A. Eugster
8ecf208fad l10n corrections (HTML tags included again)
svn path=/branches/KDE4/; revision=2959
2009-01-25 18:47:02 +00:00
Simon A. Eugster
d31733fca8 Typo: no space before question mark in English
svn path=/branches/KDE4/; revision=2958
2009-01-25 18:41:21 +00:00
Simon A. Eugster
f341dd73e0 Translation by Szalai „KAMI” Kálmán, inserted from http://hun.svn.sourceforge.net/viewvc/hun/trunk/KDEnLIVE/hu-HU/0.7.1/hu.po?revision=233&view=markup
svn path=/branches/KDE4/; revision=2957
2009-01-25 15:46:19 +00:00
Jean-Baptiste Mardelle
5f6255935b Added AudioVideoEditing category
svn path=/branches/KDE4/; revision=2956
2009-01-25 14:57:29 +00:00
Jean-Baptiste Mardelle
33ea09f206 Fix transition in group move :
http://www.kdenlive.org:80/mantis/view.php?id=523

svn path=/branches/KDE4/; revision=2955
2009-01-25 14:56:39 +00:00
Jean-Baptiste Mardelle
f843be6206 Don't loose effects when group moving, part of :
http://www.kdenlive.org:80/mantis/view.php?id=523

svn path=/branches/KDE4/; revision=2954
2009-01-25 14:51:45 +00:00
Jean-Baptiste Mardelle
379594c2e4 Fixed errors in po file
svn path=/branches/KDE4/; revision=2953
2009-01-25 14:42:20 +00:00
Salvatore Brigaglia
c428a5b77c Changed some incoherent string
svn path=/branches/KDE4/; revision=2952
2009-01-25 14:29:04 +00:00
Jean-Baptiste Mardelle
59dad4d6de updated translation by kami
svn path=/branches/KDE4/; revision=2951
2009-01-25 13:57:29 +00:00
Simon A. Eugster
04e679dd46 Title files (*.kdenlivetitle) stored as utf-8 instead of ascii now. http://www.kdenlive.org/mantis/view.php?id=607
svn path=/branches/KDE4/; revision=2950
2009-01-25 13:36:03 +00:00
Salvatore Brigaglia
5db25dc767 Updating italian translation. Effects and transition translation still missing but the remaining should be ok.
svn path=/branches/KDE4/; revision=2949
2009-01-24 18:06:49 +00:00
Jean-Michel Poure
ffbe165040 French translation
svn path=/branches/KDE4/; revision=2948
2009-01-24 10:07:19 +00:00
Simon A. Eugster
10d9b15b77 Corrections
svn path=/branches/KDE4/; revision=2947
2009-01-23 18:38:28 +00:00
Marco Gittler
ff83737cdf fix crash when starting under macOSX
svn path=/branches/KDE4/; revision=2946
2009-01-23 18:09:31 +00:00
Jean-Baptiste Mardelle
6e2297f201 Fix insertion of fadeout effect
svn path=/branches/KDE4/; revision=2945
2009-01-22 22:03:12 +00:00
Jean-Baptiste Mardelle
b2acfc409b Update pot file for translations
svn path=/branches/KDE4/; revision=2944
2009-01-22 21:28:32 +00:00
Simon A. Eugster
33bd9b2035 Uppercased
svn path=/branches/KDE4/; revision=2943
2009-01-22 20:59:03 +00:00
Jean-Baptiste Mardelle
61b0188d42 * Fix crash related to invalid project folder
* Fix crash with missing title clip image

svn path=/branches/KDE4/; revision=2942
2009-01-22 20:27:08 +00:00
Simon A. Eugster
5cc6c6a177 Corrections in Strings (DVD uppercase etc.)
svn path=/branches/KDE4/; revision=2941
2009-01-22 18:03:19 +00:00
Simon A. Eugster
873fa9a755 Translations added
svn path=/branches/KDE4/; revision=2940
2009-01-22 18:02:03 +00:00
Jean-Baptiste Mardelle
11eb431aa0 Allow editing of clip names again (for color, titles & slideshows), fix saving issue:
http://www.kdenlive.org:80/mantis/view.php?id=589

svn path=/branches/KDE4/; revision=2939
2009-01-21 21:50:28 +00:00
Jean-Baptiste Mardelle
b81944ffed Also reindent thumbnailer folder
svn path=/branches/KDE4/; revision=2938
2009-01-21 20:09:50 +00:00
Jean-Baptiste Mardelle
8f76e7d029 Use separate counters for Clips and Folders:
http://www.kdenlive.org:80/mantis/view.php?id=540

svn path=/branches/KDE4/; revision=2937
2009-01-21 19:36:35 +00:00
Jean-Baptiste Mardelle
902997ac80 Fix crash reported in
http://www.kdenlive.org:80/mantis/view.php?id=552

svn path=/branches/KDE4/; revision=2936
2009-01-21 17:54:22 +00:00
Jean-Baptiste Mardelle
14bf85958b Some work on the dvd wizard
svn path=/branches/KDE4/; revision=2935
2009-01-21 10:12:21 +00:00
Jean-Baptiste Mardelle
cd67b9fabe Store alsa device name instead of item order:
http://www.kdenlive.org:80/mantis/view.php?id=573

svn path=/branches/KDE4/; revision=2934
2009-01-21 10:11:17 +00:00
Jean-Baptiste Mardelle
5972b11e71 start improving dvd wizard
svn path=/branches/KDE4/; revision=2933
2009-01-19 18:18:59 +00:00
Jean-Baptiste Mardelle
329f0b5d6f Open dvd wizard after rendering if user asked it
svn path=/branches/KDE4/; revision=2932
2009-01-19 17:44:53 +00:00
Jean-Baptiste Mardelle
54225231f0 Add channelcopy effect (thanks Dan)
svn path=/branches/KDE4/; revision=2931
2009-01-19 17:43:42 +00:00
Jean-Baptiste Mardelle
21fa2f24bb Westley thumbnailer: reindent + cleanup useless includes
svn path=/branches/KDE4/; revision=2930
2009-01-19 12:09:46 +00:00
Jean-Baptiste Mardelle
c6a3a5c5f4 Replace text() by url().path() in KUrlRequester since text() was only introduced in KDE 4.2
svn path=/branches/KDE4/; revision=2929
2009-01-19 11:37:21 +00:00
Jean-Baptiste Mardelle
8c6936858b New Dvd wizard (in menu File).
Fix some mem leaks

svn path=/branches/KDE4/; revision=2928
2009-01-18 02:22:30 +00:00
Jean-Baptiste Mardelle
8bf1b4441d Updated the rendering dialog:
* add option to disable audio
* Re-organise categories
* Improved info in the "Running jobs" widget, including crash log

svn path=/branches/KDE4/; revision=2927
2009-01-16 17:43:39 +00:00
Simon A. Eugster
579e6e7cb6 Typo: Space removed
svn path=/branches/KDE4/; revision=2926
2009-01-15 20:50:06 +00:00
Simon A. Eugster
e38fe7920e Typo: Space removed
svn path=/branches/KDE4/; revision=2925
2009-01-15 20:49:20 +00:00
Simon A. Eugster
956b77cb26 translations
svn path=/branches/KDE4/; revision=2924
2009-01-15 20:46:50 +00:00
Jean-Baptiste Mardelle
c8dd131157 Set window title for render dialog
svn path=/branches/KDE4/; revision=2923
2009-01-15 16:00:32 +00:00
Jean-Baptiste Mardelle
1089e03902 Jobs can now be aborted from the "running job" view
svn path=/branches/KDE4/; revision=2922
2009-01-15 15:56:45 +00:00
Jean-Baptiste Mardelle
997e9f8aae Auto switch to the new rendering progress dialog when pressing "start render"
svn path=/branches/KDE4/; revision=2921
2009-01-15 15:35:35 +00:00
Jean-Baptiste Mardelle
d31d2e7766 Start of Kdenlive's d-bus interface, bringing a new tab in the render dialog showing currently running renderings
svn path=/branches/KDE4/; revision=2920
2009-01-14 23:22:22 +00:00
Jean-Michel Poure
c539149fb7 Fix line 2481 in german translation. Line shoud end with \n
svn path=/branches/KDE4/; revision=2919
2009-01-14 08:28:24 +00:00
Simon A. Eugster
b9ea4d89ea Patch by Dan Dennedy; needless bracket prevented compiling
svn path=/branches/KDE4/; revision=2918
2009-01-14 07:15:54 +00:00
Marco Gittler
9f37e75c3b wrong translation
svn path=/branches/KDE4/; revision=2917
2009-01-13 20:01:35 +00:00
Simon A. Eugster
ec3d02320e l18n-Updates: Less work for translaters, excluded HTML tags
svn path=/branches/KDE4/; revision=2916
2009-01-13 19:23:59 +00:00
Simon A. Eugster
bdb2285ec3 Updated
svn path=/branches/KDE4/; revision=2915
2009-01-13 19:11:07 +00:00
Jean-Baptiste Mardelle
17d296dfa4 Fix title clips antialiasing (path by griphiam):
http://www.kdenlive.org:80/mantis/view.php?id=558
Also fix crashing previous commit.

svn path=/branches/KDE4/; revision=2914
2009-01-13 17:04:58 +00:00
Jean-Baptiste Mardelle
c202c7c684 Fix problem on effect deletion, might help in:
http://www.kdenlive.org:80/mantis/view.php?id=281

svn path=/branches/KDE4/; revision=2913
2009-01-13 16:35:04 +00:00
Jean-Baptiste Mardelle
49f7333d13 cleanup
svn path=/branches/KDE4/; revision=2912
2009-01-13 15:23:49 +00:00
Jean-Baptiste Mardelle
b42d2d40dd updated pot file
svn path=/branches/KDE4/; revision=2911
2009-01-13 15:09:51 +00:00
Jean-Baptiste Mardelle
1e644b6f12 Clear monitor when the clip was removed from project, should fix:
http://www.kdenlive.org:80/mantis/view.php?id=578

svn path=/branches/KDE4/; revision=2910
2009-01-13 14:14:45 +00:00
Jean-Baptiste Mardelle
c2af27d220 Forgotten file from previous commit, some fixes for the b frame drop option
svn path=/branches/KDE4/; revision=2909
2009-01-13 10:46:19 +00:00
Jean-Baptiste Mardelle
8d7cacd456 Fix lots of issues with slowmotioned clips (bugs in move, resize, copy, load & save)
svn path=/branches/KDE4/; revision=2908
2009-01-13 09:04:00 +00:00
Jean-Baptiste Mardelle
291eed843d When creating a slideshow, only create thumbnails for the first 80 images so that it doesn't take several minutes to add a slideshow of 1000 images
svn path=/branches/KDE4/; revision=2907
2009-01-13 01:26:25 +00:00
Jean-Baptiste Mardelle
30576fe47b * New config option for preview: disable B Frame decoding on h.264:
http://www.kdenlive.org:80/mantis/view.php?id=494

svn path=/branches/KDE4/; revision=2906
2009-01-13 00:18:23 +00:00
Jean-Baptiste Mardelle
4d1579c77e Small cleanup
svn path=/branches/KDE4/; revision=2905
2009-01-12 20:29:37 +00:00
Jean-Baptiste Mardelle
d07455993c Forgotten file from previous commit
svn path=/branches/KDE4/; revision=2904
2009-01-12 20:28:11 +00:00
Simon A. Eugster
1e3a1ff857 update ... is the keys.pot out of date?
svn path=/branches/KDE4/; revision=2903
2009-01-12 19:23:30 +00:00
Simon A. Eugster
7fc41642ed i18n: HTML tags don't need to be translated, excluded.
svn path=/branches/KDE4/; revision=2902
2009-01-12 18:58:28 +00:00
Jean-Baptiste Mardelle
727438e4c2 Fix errors in transition handling, should fix:
http://www.kdenlive.org/mantis/view.php?id=566

svn path=/branches/KDE4/; revision=2901
2009-01-12 18:17:41 +00:00
Jean-Michel Poure
8e7cd2d3f7 Adding MPEG-4 I-Frames profile
svn path=/branches/KDE4/; revision=2900
2009-01-12 17:21:19 +00:00
Jean-Baptiste Mardelle
efb472bdbe Fix error in transition handling (when switching transition type)
svn path=/branches/KDE4/; revision=2899
2009-01-12 12:11:01 +00:00
Jean-Michel Poure
8442dd89a1 Adding HDV-1080-25p and HDV-1080-30p export profiles. For HDV1080, video bitrate is now 25000k, same as Canon HV20 bitrate. By default, export mp2 stereo sound.
svn path=/branches/KDE4/; revision=2898
2009-01-12 10:21:04 +00:00
Jean-Michel Poure
2a2a4ea8f3 Cosmetic changes in DVD vob export.
svn path=/branches/KDE4/; revision=2897
2009-01-12 08:45:54 +00:00
Jean-Baptiste Mardelle
adbec30631 slightly improved canceling of wrong transition action
svn path=/branches/KDE4/; revision=2896
2009-01-12 02:39:13 +00:00
Mads Bondo Dydensborg
da670ef241 Fix issue 0000543: [PATCH] Escaping of hypens in manpages (http://www.kdenlive.org/mantis/view.php?id=543) - Patch from Patrick Matthäi
svn path=/branches/KDE4/; revision=2895
2009-01-11 21:32:11 +00:00
Simon A. Eugster
f9d3575987 my notebook ...
svn path=/branches/KDE4/; revision=2894
2009-01-11 20:55:49 +00:00
Simon A. Eugster
fb2f811d44 translations, typo, corrections
svn path=/branches/KDE4/; revision=2893
2009-01-11 20:55:20 +00:00
Jean-Baptiste Mardelle
261ff4478f Set document state to modified if we fixed something during the document opening
svn path=/branches/KDE4/; revision=2892
2009-01-11 17:14:34 +00:00
Jean-Baptiste Mardelle
5a0c3988f0 New russian translation by Radist
svn path=/branches/KDE4/; revision=2891
2009-01-11 17:11:39 +00:00
Jean-Baptiste Mardelle
c3b8389721 Fix typo
svn path=/branches/KDE4/; revision=2890
2009-01-11 16:51:35 +00:00
Juan M. Herrera
6237663b5c Updated list of translators
svn path=/branches/KDE4/; revision=2889
2009-01-11 14:24:21 +00:00
Jean-Baptiste Mardelle
45472fbfaf Load metadata when opening doc
svn path=/branches/KDE4/; revision=2888
2009-01-10 18:28:00 +00:00
Jean-Baptiste Mardelle
a8f2a03e53 Start implementing clip metadata (not finished yet)
svn path=/branches/KDE4/; revision=2887
2009-01-10 17:57:48 +00:00
Jean-Baptiste Mardelle
abc78e1e58 * Make sure user cannot create transition with in point bigger than out point
* FIx bug in project opening that could cause a track to be completely offset and corrupt project

svn path=/branches/KDE4/; revision=2886
2009-01-10 16:12:24 +00:00
Jean-Baptiste Mardelle
6488d3981a * Remove broken transition (where in > out) on project opening
svn path=/branches/KDE4/; revision=2885
2009-01-09 15:10:58 +00:00
Jean-Baptiste Mardelle
ae841c77a9 Fix compilation:
http://www.kdenlive.org:80/mantis/view.php?id=571

svn path=/branches/KDE4/; revision=2884
2009-01-07 12:18:13 +00:00
Jean-Baptiste Mardelle
f77d9908db Cleanup last commit and some real mess in profile switching
svn path=/branches/KDE4/; revision=2883
2009-01-07 00:38:21 +00:00
Jean-Baptiste Mardelle
9ee79fd845 Fix initializing of project monitor aspect (previously did not change from 4:3 to 16:9)
svn path=/branches/KDE4/; revision=2882
2009-01-06 23:34:41 +00:00
Jean-Baptiste Mardelle
675c2b2251 also reindent files in renderer and plugins
svn path=/branches/KDE4/; revision=2881
2009-01-06 22:53:13 +00:00
Jean-Baptiste Mardelle
f7b6e23085 Add new clip generator: noise
svn path=/branches/KDE4/; revision=2880
2009-01-06 22:52:47 +00:00
Jean-Baptiste Mardelle
d43962a423 Forgotten commit
svn path=/branches/KDE4/; revision=2879
2009-01-06 21:07:13 +00:00
Jean-Baptiste Mardelle
fc56d14bf2 Fix some wrong formats / codecs:
* rv20 is a codec, not a format
* Windows Media video7 codec is wmv1 not wmv7

svn path=/branches/KDE4/; revision=2878
2009-01-06 21:05:23 +00:00
Jean-Michel Poure
181342c38b Render profiles: explicit mpeg container in MPEG-2
svn path=/branches/KDE4/; revision=2877
2009-01-06 20:04:59 +00:00
Jean-Michel Poure
f65950c4e3 Render profiles: explicit mpegvideo container in MPEG-2, trellis for DVD and MPEG-2.
svn path=/branches/KDE4/; revision=2876
2009-01-06 20:01:03 +00:00
Jean-Baptiste Mardelle
bb5aa13789 Only display available codecs in rendering dialog
svn path=/branches/KDE4/; revision=2875
2009-01-06 18:16:57 +00:00
Jean-Baptiste Mardelle
e30c1d6004 Improve startup Wizard:
* Do not abort if avformat module not present
* Inform user about state of important MLT modules
* Show list of available audio/video codecs using MLT's new info command (acodec-list...)

svn path=/branches/KDE4/; revision=2874
2009-01-06 14:57:01 +00:00
Jean-Baptiste Mardelle
2dc08964d8 Fix wrong signal
svn path=/branches/KDE4/; revision=2873
2009-01-06 14:54:51 +00:00
Jean-Baptiste Mardelle
9cebbfefb3 Save zone in/out in kdenlive document:
http://www.kdenlive.org:80/mantis/view.php?id=517

svn path=/branches/KDE4/; revision=2872
2009-01-05 22:18:32 +00:00
Jean-Baptiste Mardelle
2854b18ee5 Use the new MLT's producer_consumer to render to a different size than the project profile:
http://www.kdenlive.org/mantis/view.php?id=323

svn path=/branches/KDE4/; revision=2871
2009-01-05 21:32:12 +00:00
Jean-Michel Poure
f75a35f79e Fixing NTSC DV rendering formats, fixing http://www.kdenlive.org/mantis/view.php?id=538
svn path=/branches/KDE4/; revision=2870
2009-01-05 13:26:30 +00:00
Jean-Baptiste Mardelle
4a941ab84f Fix corruption of automatic transitions:
http://www.kdenlive.org:80/mantis/view.php?id=542

svn path=/branches/KDE4/; revision=2869
2009-01-04 09:01:57 +00:00
Jean-Baptiste Mardelle
d13349b058 Fix crash on clip paste:
http://www.kdenlive.org:80/mantis/view.php?id=539

svn path=/branches/KDE4/; revision=2868
2009-01-04 08:45:08 +00:00
Jean-Baptiste Mardelle
fa56b65245 Forgot to commit that one in previous change
svn path=/branches/KDE4/; revision=2867
2009-01-04 06:29:16 +00:00
Jean-Baptiste Mardelle
a956ade6f5 * Small cmake cleanup
* Introduce Kdenlive plugins, first example is a countdown generator (currently requires MLT's pango producer)

svn path=/branches/KDE4/; revision=2866
2009-01-03 19:51:35 +00:00
Mads Bondo Dydensborg
5c9bfe5534 Indentation fixes
svn path=/branches/KDE4/; revision=2865
2009-01-02 00:16:53 +00:00
Mads Bondo Dydensborg
4e221ad4ed Fix 551: The titlewidget (add/edit text clip dialog) should remember the last used values when adding a new clip (http://www.kdenlive.org/mantis/view.php?id=551)
svn path=/branches/KDE4/; revision=2864
2009-01-02 00:16:16 +00:00
Mads Bondo Dydensborg
6a9215dfb5 Work on: 551: The titlewidget (add/edit text clip dialog) should remember the last used values when adding a new clip (http://www.kdenlive.org/mantis/view.php?id=551) - last used settings are now stored in the kdenliverc file
svn path=/branches/KDE4/; revision=2863
2009-01-01 23:34:47 +00:00
Mads Bondo Dydensborg
c0a967cd12 Added some documentation
svn path=/branches/KDE4/; revision=2862
2009-01-01 20:44:51 +00:00
Juan M. Herrera
8d541f5376 Include message locations in pot file
svn path=/branches/KDE4/; revision=2861
2008-12-30 21:21:59 +00:00
Juan M. Herrera
e53a75c70a Include message locations in pot file
svn path=/branches/KDE4/; revision=2860
2008-12-30 21:18:41 +00:00
Jean-Baptiste Mardelle
18a11334d8 updated spanish translation
svn path=/branches/KDE4/; revision=2857
2008-12-29 13:18:51 +00:00
Jean-Baptiste Mardelle
2fd6b55add updated readme
svn path=/branches/KDE4/; revision=2855
2008-12-29 13:02:01 +00:00
Jean-Baptiste Mardelle
7caecc149e * Fix several transition move problems
* Add default shortcuts to play zone and loop zone
* increment version number f0r 0.7.1 release

svn path=/branches/KDE4/; revision=2854
2008-12-29 12:47:39 +00:00
Jean-Baptiste Mardelle
dafc76f3bf Add some more sox effects (band, bass, gain, phaser, stretch)
svn path=/branches/KDE4/; revision=2853
2008-12-29 03:50:56 +00:00
Jean-Baptiste Mardelle
46d5b2c8d8 Fix problem with clip resize, should solve:
http://www.kdenlive.org:80/mantis/view.php?id=362

svn path=/branches/KDE4/; revision=2852
2008-12-29 01:55:00 +00:00
Jean-Baptiste Mardelle
80c878e198 Fix crash on clip insertion redo:
http://www.kdenlive.org:80/mantis/bug_view_page.php?bug_id=526

Fix timeline position not restored after loading project file

svn path=/branches/KDE4/; revision=2851
2008-12-29 00:39:33 +00:00
Jean-Baptiste Mardelle
9b1a44b077 less debug
svn path=/branches/KDE4/; revision=2850
2008-12-29 00:36:02 +00:00
Mads Bondo Dydensborg
82b54def1c Updated danish translation
svn path=/branches/KDE4/; revision=2849
2008-12-28 21:11:09 +00:00
Mads Bondo Dydensborg
a036e36659 Removed some illegal control chars - please syntax check po files, if possible, before committing them. Thanks
svn path=/branches/KDE4/; revision=2848
2008-12-28 20:46:42 +00:00
Salvatore Brigaglia
d0ab2b9986 Latest fixes but still no translation for effects
svn path=/branches/KDE4/; revision=2847
2008-12-28 20:16:48 +00:00
Jan Drábek
f584ef97ee Updated czech translation
svn path=/branches/KDE4/; revision=2846
2008-12-28 19:41:01 +00:00
Jean-Michel Poure
15651e2d47 Small fix in French translation
svn path=/branches/KDE4/; revision=2845
2008-12-28 19:07:41 +00:00
Jean-Baptiste Mardelle
8e582edc56 updated Hebrew translation by amir sher
svn path=/branches/KDE4/; revision=2844
2008-12-28 18:42:51 +00:00
Jean-Baptiste Mardelle
9dc09fe123 Fix file dialog in render widget
svn path=/branches/KDE4/; revision=2843
2008-12-28 18:34:21 +00:00
Jean-Baptiste Mardelle
8c70676956 Small string cleanup as recommended by jmpoure
svn path=/branches/KDE4/; revision=2842
2008-12-28 18:21:28 +00:00
Jean-Baptiste Mardelle
27c660bcee Fix problem in transition move
svn path=/branches/KDE4/; revision=2841
2008-12-28 18:19:43 +00:00
Jean-Michel Poure
2f83ca3940 Update French translation
svn path=/branches/KDE4/; revision=2840
2008-12-28 18:09:27 +00:00
Jean-Michel Poure
44dded23d2 Update French translation
svn path=/branches/KDE4/; revision=2839
2008-12-28 17:55:25 +00:00
Jean-Baptiste Mardelle
c5720a8894 Fix LADSPA effects, should work now:
http://www.kdenlive.org:80/mantis/view.php?id=499

svn path=/branches/KDE4/; revision=2838
2008-12-28 17:47:26 +00:00
Jean-Baptiste Mardelle
dc7c415e20 Make sox effects work again, part of bug:
http://www.kdenlive.org:80/mantis/view.php?id=499

svn path=/branches/KDE4/; revision=2837
2008-12-28 15:30:40 +00:00
Jean-Michel Poure
1398ea377d Adding Windows Media Player and Apple Quicktime player rendering formats. Reference: http://ffmpeg.mplayerhq.hu/compat.html
svn path=/branches/KDE4/; revision=2836
2008-12-27 11:09:24 +00:00
Jean-Michel Poure
3469ed0167 Remove Mpeg2-ts, which are part of HDV
svn path=/branches/KDE4/; revision=2835
2008-12-27 07:14:46 +00:00
Jean-Michel Poure
7e7cc4de86 More H-264 settings
svn path=/branches/KDE4/; revision=2834
2008-12-26 23:55:38 +00:00
Jean-Michel Poure
a164114aac Add a simple Mpeg2 profile with B-frames. Offers good results and rather small size.
svn path=/branches/KDE4/; revision=2833
2008-12-26 23:07:37 +00:00
Jean-Michel Poure
6228b477d2 Rename mpeg4 into MPEG-4, mpeg2ts into MPEG-2 TS and h264 into H.264
svn path=/branches/KDE4/; revision=2832
2008-12-26 22:55:26 +00:00
Jean-Michel Poure
6f23a28814 Rename some DV rendering profiles 4:3 or 16:9 instead of normal/wide. For consistency with DVD rendering.
svn path=/branches/KDE4/; revision=2831
2008-12-26 22:50:52 +00:00
Jean-Michel Poure
aa191ff813 Adding 18000k and 25000k h264 and Mpeg2ts rendering profiles
svn path=/branches/KDE4/; revision=2830
2008-12-26 22:44:45 +00:00
Jean-Michel Poure
4319633b41 Minor correction
svn path=/branches/KDE4/; revision=2829
2008-12-26 22:42:04 +00:00
Jean-Michel Poure
0b1e1a2eac Adding two high quality export profiles: Mpeg2 I-frame only, with highest FFmpeg quality and H264 with FFmpeg constant quality of one. Per http://itbroadcastanddigitalcinema.com/ffmpeg_howto.html. I chose mp2 sound for Mpeg2 and aac for H264. H264 PAR is broken for an unknown reason. Tested these two profiles with XDcam, HDV and DV footage from our page http://www.kdenlive.org/contribution-manual/footage
svn path=/branches/KDE4/; revision=2828
2008-12-26 22:38:46 +00:00
Jean-Michel Poure
d6b61b8b29 Minor correction in PAL rendering profile.
svn path=/branches/KDE4/; revision=2827
2008-12-26 10:20:28 +00:00
Jean-Michel Poure
76835073aa Fix DV NTSC
svn path=/branches/KDE4/; revision=2826
2008-12-26 10:15:08 +00:00
Jean-Michel Poure
3bcc664cb1 Split DV rendering into AVI DV and RAW DV. Support normal and wide rendering. Add support for DVCPRO25 and DVCPRO50 professional formats. Rename DV50 into DVCPRO50.
svn path=/branches/KDE4/; revision=2825
2008-12-26 10:08:25 +00:00
Salvatore Brigaglia
668a16378a Italian translation update, now i need to think on translating effects
svn path=/branches/KDE4/; revision=2824
2008-12-25 11:20:36 +00:00
Jean-Baptiste Mardelle
972f5a9688 Last i18n changes before 0.7.1
svn path=/branches/KDE4/; revision=2823
2008-12-25 10:25:15 +00:00
Jean-Baptiste Mardelle
ff13434dae GUI fixes (enable / disable) actions when they should be available or not.
svn path=/branches/KDE4/; revision=2822
2008-12-25 09:49:23 +00:00
Jean-Baptiste Mardelle
64cfba1eba This will hopefully fix most clip & group move issues. Should solve points b) and c) from:
http://www.kdenlive.org:80/mantis/view.php?id=271

svn path=/branches/KDE4/; revision=2821
2008-12-25 03:53:52 +00:00
Jean-Baptiste Mardelle
8a39629b05 Also show kdenlive lumas in the slideshow dialog
svn path=/branches/KDE4/; revision=2820
2008-12-23 11:47:36 +00:00
Jean-Baptiste Mardelle
de10f08088 Fix spacer action label ("remove space" or "insert space"), point e) of:
http://www.kdenlive.org/mantis/view.php?id=271

svn path=/branches/KDE4/; revision=2819
2008-12-23 10:47:47 +00:00
Jean-Baptiste Mardelle
b769040273 Rewrite the spacer command, should hopefully solve:
http://www.kdenlive.org:80/mantis/view.php?id=271

svn path=/branches/KDE4/; revision=2818
2008-12-23 01:38:58 +00:00
Jean-Baptiste Mardelle
29c08f32ad Reset tool to "Select" tool when opening a document or creating a new one as reported in a comment of:
http://www.kdenlive.org:80/mantis/view.php?id=271

svn path=/branches/KDE4/; revision=2817
2008-12-22 17:24:02 +00:00
Jean-Baptiste Mardelle
8191e28c24 Fix several issues with clip move and resize, should solve:
http://www.kdenlive.org:80/mantis/view.php?id=362

svn path=/branches/KDE4/; revision=2816
2008-12-22 16:54:47 +00:00
Jean-Baptiste Mardelle
a21559154d Real fix for set in point problem:
http://www.kdenlive.org:80/mantis/view.php?id=501

svn path=/branches/KDE4/; revision=2815
2008-12-22 12:15:44 +00:00
Jean-Baptiste Mardelle
1f47f7d44c Remove useless file, now that we don't depend on FFmpeg to build
svn path=/branches/KDE4/; revision=2814
2008-12-22 12:12:48 +00:00
Marco Gittler
bd43e42d0d renderer.cpp: ffmpeg dep removed (patch from dan) , read metadata from mlt
svn path=/branches/KDE4/; revision=2813
2008-12-22 08:34:49 +00:00
Jean-Baptiste Mardelle
ba2c12510f Check for invalid resize:
http://www.kdenlive.org:80/mantis/view.php?id=501

svn path=/branches/KDE4/; revision=2812
2008-12-21 18:32:56 +00:00
Mads Bondo Dydensborg
07ac298e90 Updated Hebrew translation from
amir sher

svn path=/branches/KDE4/; revision=2811
2008-12-21 10:15:52 +00:00
Mads Bondo Dydensborg
1ab9ec4cd1 Proposed solution to issue 0000345: Capture inigo error to log or screen (http://www.kdenlive.org/mantis/view.php?id=345) - adds some more debugging output, and logs command line arguments and westley content to log file in temporary directory. I believe we need something like this to help out the users that does not get anything rendered. There is no integration with the GUI though, and since I am unable to get avformat to complain, I don't know if all errors are collected. Please note that I reindented the files before committing, and that the commit is much larger than the changes due to this.
svn path=/branches/KDE4/; revision=2810
2008-12-20 17:21:34 +00:00
Jean-Baptiste Mardelle
d0a7184b48 Fix wrong project clip deletion, fixes:
http://www.kdenlive.org:80/mantis/view.php?id=493

svn path=/branches/KDE4/; revision=2809
2008-12-19 16:50:54 +00:00
Mads Bondo Dydensborg
7e3abf1c8e Added message asking about searching manually or not when unable to locate clip. Patch by Alberto Villa. The best would have been to improve the logic to search last clip folder, but this is still a slight improvement, and I think we are now ready to close Fix issue 0000465: exporting to ogg theora 720x576 blocks system (http://www.kdenlive.org/mantis/view.php?id=465)
svn path=/branches/KDE4/; revision=2808
2008-12-18 13:31:46 +00:00
Mads Bondo Dydensborg
47294e2c4d Fix issue 0000237: Unable to open Kdenlive 0.5 project (http://www.kdenlive.org/mantis/view.php?id=237) - by disabling pfv 0.5 loading
svn path=/branches/KDE4/; revision=2807
2008-12-18 11:54:03 +00:00
Mads Bondo Dydensborg
a53a513195 Fix issue 0000199: include .spec to build RPMs (http://www.kdenlive.org/mantis/view.php?id=199)
svn path=/branches/KDE4/; revision=2806
2008-12-18 11:30:31 +00:00
Mads Bondo Dydensborg
0449cc5f42 Fix issue 0000199: include .spec to build RPMs (http://www.kdenlive.org/mantis/view.php?id=199)
svn path=/branches/KDE4/; revision=2805
2008-12-18 11:14:40 +00:00
Mads Bondo Dydensborg
0ed94c5e0e Another patch for issue 0000358: Resize clip in timeline from clip end causes clip to disappear or shrink in imported 0.5 project (http://www.kdenlive.org/mantis/view.php?id=358) - from Alberto Villa
svn path=/branches/KDE4/; revision=2804
2008-12-18 11:09:02 +00:00
Jean-Baptiste Mardelle
b140a26e6f Add some tests to prevent crash when creating effect (based on patch from Stephen Sinclair)
svn path=/branches/KDE4/; revision=2803
2008-12-17 08:55:11 +00:00
Jean-Baptiste Mardelle
86e7ae8be1 Rename "Play Section" into "Play Zone:
http://www.kdenlive.org:80/mantis/view.php?id=442

svn path=/branches/KDE4/; revision=2802
2008-12-16 21:54:56 +00:00
Jean-Baptiste Mardelle
900ce81974 Re-add Set Zone out point action which had disappeared
Fix play / pause button in monitor:
http://www.kdenlive.org:80/mantis/view.php?id=445

svn path=/branches/KDE4/; revision=2801
2008-12-16 21:41:26 +00:00
Jean-Baptiste Mardelle
169d3d2e0e Undo a clip deletion should restore effects:
http://www.kdenlive.org:80/mantis/view.php?id=468

svn path=/branches/KDE4/; revision=2800
2008-12-16 21:33:07 +00:00
Jean-Baptiste Mardelle
48a2397617 Blacklist frei0r facedetect module:
http://www.kdenlive.org:80/mantis/view.php?id=476

svn path=/branches/KDE4/; revision=2799
2008-12-16 21:26:27 +00:00
Jean-Baptiste Mardelle
1930a8bde8 Go to one second forward / backword:
http://www.kdenlive.org:80/mantis/view.php?id=479

svn path=/branches/KDE4/; revision=2798
2008-12-16 20:26:27 +00:00
Jean-Baptiste Mardelle
353c9896ce Remove wrong path in extractrc for .pot file
svn path=/branches/KDE4/; revision=2797
2008-12-16 20:03:30 +00:00
Jean-Baptiste Mardelle
3ce9b14b33 updated pot file for translations
svn path=/branches/KDE4/; revision=2796
2008-12-16 20:02:36 +00:00
Jean-Baptiste Mardelle
e1f70636c5 Add missing i18n strings
svn path=/branches/KDE4/; revision=2795
2008-12-16 19:22:02 +00:00
Jean-Baptiste Mardelle
4196639fc8 Fix insertion point of new track
svn path=/branches/KDE4/; revision=2794
2008-12-16 19:21:10 +00:00
Jean-Baptiste Mardelle
b885f7fa1f Don't use pointer when inserting track, might help with some crashes (?)
svn path=/branches/KDE4/; revision=2793
2008-12-16 19:05:57 +00:00
Jean-Baptiste Mardelle
e681eaf755 Fix some refresh issues when adding/removing track
svn path=/branches/KDE4/; revision=2792
2008-12-16 17:19:55 +00:00
Jean-Baptiste Mardelle
6a67414cb9 *Add a new page to startup wizard to check presence of important programs (ffplay, dvgrab, ...)
*Allow users to run Wizard from Setting menu

svn path=/branches/KDE4/; revision=2791
2008-12-16 14:11:34 +00:00
Jean-Baptiste Mardelle
8938773948 By default, transitions are now "automatic". So when you move or resize a clip, the transition will automatically adjust to keep in sync with the clip. This feature can be disabled for each transition by right-clicking on it and disabling "automatic transition". Feedback welcome but I think it works rather well.
http://www.kdenlive.org:80/mantis/view.php?id=361

svn path=/branches/KDE4/; revision=2790
2008-12-16 11:35:09 +00:00
Jean-Baptiste Mardelle
5fb0a5d3b0 start work on automatic transitions
svn path=/branches/KDE4/; revision=2789
2008-12-15 12:33:07 +00:00
Mads Bondo Dydensborg
1fee894dc7 Partial: Fix issue 0000358: Resize clip in timeline from clip end causes clip to disappear or shrink in imported 0.5 project (http://www.kdenlive.org/mantis/view.php?id=358) - patch by xzhayon
svn path=/branches/KDE4/; revision=2788
2008-12-15 07:26:26 +00:00
Jean-Baptiste Mardelle
3c60d4194a Less debug
svn path=/branches/KDE4/; revision=2787
2008-12-13 19:16:44 +00:00
Jean-Baptiste Mardelle
3e0775f80b "Get New Lumas" option in settings menu to automatically download new transition luma files from kde-files.org
svn path=/branches/KDE4/; revision=2786
2008-12-13 19:03:42 +00:00
Mads Bondo Dydensborg
5fe70d89ef Fix issue 0000464: Xvid4 codecs have all the same bitrate value (http://www.kdenlive.org/mantis/view.php?id=464)
svn path=/branches/KDE4/; revision=2785
2008-12-13 17:09:19 +00:00
Jean-Baptiste Mardelle
010c83463c Cache timeline thumbnails for faster project opening, should solve:
http://www.kdenlive.org:80/mantis/view.php?id=274
http://www.kdenlive.org:80/mantis/view.php?id=275

svn path=/branches/KDE4/; revision=2784
2008-12-13 14:55:09 +00:00
Jean-Baptiste Mardelle
89e0a1ac52 Only reset project profile if it was changed
svn path=/branches/KDE4/; revision=2783
2008-12-13 11:59:07 +00:00
Jean-Baptiste Mardelle
1e72f355aa Initial support for changing project folder
svn path=/branches/KDE4/; revision=2782
2008-12-13 03:22:29 +00:00
Jean-Baptiste Mardelle
51c328d045 Use hexa values for clip hashes
svn path=/branches/KDE4/; revision=2781
2008-12-13 02:50:54 +00:00
Jean-Baptiste Mardelle
db3a514547 Start caching of project tree thumbnails for faster project opening
svn path=/branches/KDE4/; revision=2780
2008-12-13 01:39:37 +00:00
Jean-Baptiste Mardelle
4be9030ba6 Improve profile selection in First run wizard
Start implementing project folder

svn path=/branches/KDE4/; revision=2779
2008-12-13 00:09:54 +00:00
Jean-Baptiste Mardelle
b0da79a805 Fix most issues with spacer tool. Tool now applies to all tracks by default, CTRL + click only affects current track as suggested in:
http://www.kdenlive.org:80/mantis/view.php?id=271

svn path=/branches/KDE4/; revision=2778
2008-12-12 15:20:38 +00:00
Jean-Baptiste Mardelle
460b09eb90 Duration of color / image / text clips is now correctly set to a maximum value of 15000 frames (10 minutes). This is the maximum value defined by MLT.
http://www.kdenlive.org:80/mantis/view.php?id=439

svn path=/branches/KDE4/; revision=2777
2008-12-12 12:13:45 +00:00
Marcelo Soares Souza
6180efd66c pt_BR translation revision.
svn path=/branches/KDE4/; revision=2776
2008-12-11 13:51:38 +00:00
Jean-Baptiste Mardelle
32c74060cc Fix problem in add track, might solve:
http://www.kdenlive.org:80/mantis/view.php?id=452

svn path=/branches/KDE4/; revision=2775
2008-12-11 13:06:39 +00:00
Jean-Baptiste Mardelle
a87b910ae8 Almost solved all group move issues, still one lost synchro bug under investigation
svn path=/branches/KDE4/; revision=2774
2008-12-11 12:46:34 +00:00
Jean-Baptiste Mardelle
afc6fb7b25 Fix project duration when deleting last clip in a track:
http://www.kdenlive.org/mantis/view.php?id=448

svn path=/branches/KDE4/; revision=2773
2008-12-09 22:15:24 +00:00
Jean-Baptiste Mardelle
f36e96d66c Fix group move, should solve:
http://www.kdenlive.org:80/mantis/view.php?id=417
http://www.kdenlive.org:80/mantis/view.php?id=421

svn path=/branches/KDE4/; revision=2772
2008-12-09 22:10:06 +00:00
Jean-Baptiste Mardelle
2504f50f0a Display some more info on rendering progress (remaining time, ...)
svn path=/branches/KDE4/; revision=2771
2008-12-09 21:23:26 +00:00
Jean-Baptiste Mardelle
64bfc766fd New: Change track type (audio / video)
svn path=/branches/KDE4/; revision=2770
2008-12-09 10:02:27 +00:00
Jean-Baptiste Mardelle
12a77f9338 Don't crash when opening old Kdenlive files (introduced by previous commit)
svn path=/branches/KDE4/; revision=2769
2008-12-09 08:15:13 +00:00
Jean-Baptiste Mardelle
1a563246f5 Add *.ts extension to mpeg instead of adding *.mts twice...
svn path=/branches/KDE4/; revision=2768
2008-12-09 00:16:48 +00:00
Jean-Baptiste Mardelle
b699a00f32 Wizard will now add *.mts as a valid mpeg extension
svn path=/branches/KDE4/; revision=2767
2008-12-08 23:49:46 +00:00
Jean-Baptiste Mardelle
62f7974e07 Fix tracks issues (load & save of tracks with hidden audio or video), also fix
http://www.kdenlive.org:80/mantis/view.php?id=272

svn path=/branches/KDE4/; revision=2766
2008-12-08 23:47:11 +00:00
Mads Bondo Dydensborg
bcbaec964c Added UTF-8 as charsets - my bad
svn path=/branches/KDE4/; revision=2765
2008-12-08 14:45:16 +00:00
Jean-Baptiste Mardelle
40d8c63ec1 Cleanup tracks handling
svn path=/branches/KDE4/; revision=2764
2008-12-08 14:34:24 +00:00
Mads Bondo Dydensborg
0820132b01 Fix issue 0000443: Add portuguese (brazil) translation (http://www.kdenlive.org/mantis/view.php?id=443) - translation from Marcelo Soares Souza
svn path=/branches/KDE4/; revision=2763
2008-12-08 09:22:08 +00:00
Mads Bondo Dydensborg
3bfae95d00 Updated spec file from 199: include .spec to build RPMs (http://www.kdenlive.org/mantis/view.php?id=199) - however, man and new translations are not part of this
svn path=/branches/KDE4/; revision=2762
2008-12-08 08:02:00 +00:00
Mads Bondo Dydensborg
128e4b6759 Adding partial hebrew translation from 426: New translation - Hebrew (he) (http://www.kdenlive.org/mantis/view.php?id=426)
svn path=/branches/KDE4/; revision=2761
2008-12-08 07:55:51 +00:00
Mads Bondo Dydensborg
6958f0d808 Working on 358: Resize clip in timeline from clip end causes clip to disappear or shrink in imported 0.5 project (http://www.kdenlive.org/mantis/view.php?id=358) - probably not a full fix, but current tests work in my end
svn path=/branches/KDE4/; revision=2760
2008-12-07 20:43:35 +00:00
Jean-Baptiste Mardelle
085ec2ecfa Fix track issues:
* Add default track number to Kdenlive Settings
* Do not allow to change track number in project settings
* Fix insert point when user wants to insert track "After" current
* Fix insertion of audio tracks
http://www.kdenlive.org:80/mantis/view.php?id=272

svn path=/branches/KDE4/; revision=2759
2008-12-07 14:11:36 +00:00
Jean-Baptiste Mardelle
38d4758875 re-add Kdenlive custom luma files for transitions
svn path=/branches/KDE4/; revision=2758
2008-12-07 11:51:10 +00:00
Mads Bondo Dydensborg
8ffde1dcbb Fix issue 0000420: Please add manpages for kdenlive and kdenlive_render (http://www.kdenlive.org/mantis/view.php?id=420)
jb: I have tried to extend cmake as appropiate, and it works in my end, but if I have done something wrong, then please revert.

svn path=/branches/KDE4/; revision=2757
2008-12-06 21:32:33 +00:00
Jean-Baptiste Mardelle
5e09d46d72 Fix video4linux webcam capture, based on patch from Dan Dennedy:
http://www.kdenlive.org/mantis/view.php?id=424

svn path=/branches/KDE4/; revision=2756
2008-12-04 21:02:58 +00:00
Jean-Baptiste Mardelle
a482c3b04c Initialize markers list, may fix crash
http://www.kdenlive.org/mantis/view.php?id=423

svn path=/branches/KDE4/; revision=2755
2008-12-03 12:44:18 +00:00
Jean-Baptiste Mardelle
f8311341c9 Fix remove space through context menu, part 1 of bug report:
http://www.kdenlive.org:80/mantis/view.php?id=271

svn path=/branches/KDE4/; revision=2754
2008-12-02 23:53:43 +00:00
Jean-Baptiste Mardelle
77bc6b6e48 Don't show monitor overlay info (in / out points) when playing so that we don't slow down playing
svn path=/branches/KDE4/; revision=2753
2008-12-02 23:27:23 +00:00
Jean-Baptiste Mardelle
d0070c8b69 Fix crash on files rejected by MLT:
http://www.kdenlive.org:80/mantis/view.php?id=422

svn path=/branches/KDE4/; revision=2752
2008-12-02 23:21:41 +00:00
Jean-Baptiste Mardelle
a36d4055db Fix several crashes related to track insert / delete
svn path=/branches/KDE4/; revision=2751
2008-12-02 23:12:56 +00:00
Mads Bondo Dydensborg
fe40c5d261 Fix issue 0000425: New translation - Hungarian (hu) (http://www.kdenlive.org/mantis/view.php?id=425)
svn path=/branches/KDE4/; revision=2750
2008-12-02 19:37:29 +00:00
Mads Bondo Dydensborg
f966d381ad Fix issue 0000418: New translation - Slovenian (sl) (http://www.kdenlive.org/mantis/view.php?id=418)
svn path=/branches/KDE4/; revision=2749
2008-12-02 19:30:15 +00:00
Mads Bondo Dydensborg
c83dd0ea05 Fix issue 0000419: [PATCH] Deprecated encoding key and empty comment[de] in .desktop (http://www.kdenlive.org/mantis/view.php?id=419)
svn path=/branches/KDE4/; revision=2748
2008-12-02 19:10:50 +00:00
Jean-Baptiste Mardelle
4e64f0a97a Add / remove track now seems to work, still a few crashes if project monitor was not started
svn path=/branches/KDE4/; revision=2747
2008-12-02 18:43:48 +00:00
Jean-Baptiste Mardelle
be9f33fb28 Fix possible crash in monitor switching
svn path=/branches/KDE4/; revision=2746
2008-12-02 16:59:52 +00:00
Jean-Baptiste Mardelle
5f927986ce Experimental add / remove track, do not use in production yet
svn path=/branches/KDE4/; revision=2745
2008-12-02 16:48:01 +00:00
Jean-Baptiste Mardelle
4f4c324719 Add track should work, delete track is still to do
svn path=/branches/KDE4/; revision=2744
2008-12-02 10:49:07 +00:00
Jean-Baptiste Mardelle
7bdee3646c Markers can now be added / edited from clip monitor context menu
svn path=/branches/KDE4/; revision=2743
2008-12-02 00:16:08 +00:00
Jean-Baptiste Mardelle
26f30bafb1 Should solve most problems with group move:
http://www.kdenlive.org:80/mantis/view.php?id=421

svn path=/branches/KDE4/; revision=2742
2008-12-01 22:58:46 +00:00
Jean-Baptiste Mardelle
5ce773f25e Show error message when there is a problem deleting a clip, fix problem when selecting several clips including a transition:
http://www.kdenlive.org:80/mantis/view.php?id=417

svn path=/branches/KDE4/; revision=2741
2008-12-01 10:08:03 +00:00
Jean-Baptiste Mardelle
525e5dbded Allow changing duration of color / image clips:
http://www.kdenlive.org:80/mantis/view.php?id=398

svn path=/branches/KDE4/; revision=2740
2008-11-27 13:09:10 +00:00
Jean-Baptiste Mardelle
c1df0cdbab Forgotten file from previous commit
svn path=/branches/KDE4/; revision=2739
2008-11-27 13:08:45 +00:00
Jean-Baptiste Mardelle
f7b21faa59 Fix bug on insert space in all tracks, add context menu to remove space from track.
svn path=/branches/KDE4/; revision=2738
2008-11-27 12:54:50 +00:00
Jean-Baptiste Mardelle
7fe12c8706 Fix several issues with spacer tool + some indent fixes
svn path=/branches/KDE4/; revision=2737
2008-11-27 12:09:31 +00:00
Jean-Baptiste Mardelle
e405af45af Fix crash / corruption as reported in:
http://www.kdenlive.org:80/mantis/view.php?id=362

svn path=/branches/KDE4/; revision=2736
2008-11-26 18:12:38 +00:00
Jean-Baptiste Mardelle
4fc801f6cd Fix move of slowmotion clips:
http://www.kdenlive.org/mantis/view.php?id=375

svn path=/branches/KDE4/; revision=2735
2008-11-25 14:26:19 +00:00
Jean-Baptiste Mardelle
525fc26b01 Fix group move:
http://www.kdenlive.org/mantis/view.php?id=367

svn path=/branches/KDE4/; revision=2734
2008-11-25 13:53:23 +00:00
Jean-Baptiste Mardelle
3915be0279 * Clip Markers are now displayed over the clip monitor
* Make snap points work for clip monitor:
http://www.kdenlive.org/mantis/view.php?id=404

svn path=/branches/KDE4/; revision=2733
2008-11-25 13:19:18 +00:00
Jean-Baptiste Mardelle
b72fb2155e Show overlay info on monitor when position is at zone start or end:
http://www.kdenlive.org/mantis/view.php?id=403

svn path=/branches/KDE4/; revision=2732
2008-11-25 09:56:52 +00:00
Jean-Baptiste Mardelle
84929e0436 Spacer tool can now remove space too
svn path=/branches/KDE4/; revision=2731
2008-11-25 01:56:37 +00:00
Jean-Baptiste Mardelle
4232bc24ba Spacer tool (can only add space for the moment)
http://www.kdenlive.org/mantis/view.php?id=271

svn path=/branches/KDE4/; revision=2730
2008-11-25 00:43:23 +00:00
Jean-Baptiste Mardelle
7437b79457 Start of spacer tool: space can now be inserted via timeline context menu
svn path=/branches/KDE4/; revision=2729
2008-11-24 22:20:36 +00:00
Jean-Baptiste Mardelle
c9ef1035dd Allow selection of audio frequency for screen grabs:
http://www.kdenlive.org:80/mantis/view.php?id=371

svn path=/branches/KDE4/; revision=2728
2008-11-24 11:15:54 +00:00
Jean-Baptiste Mardelle
2d6fbdab2f When replacing a missing clip in document, set state to modified
svn path=/branches/KDE4/; revision=2727
2008-11-24 06:27:02 +00:00
Jean-Baptiste Mardelle
ca3740fa6b Fix keyframe editing:
http://www.kdenlive.org/mantis/view.php?id=390

svn path=/branches/KDE4/; revision=2726
2008-11-24 06:09:16 +00:00
Jean-Baptiste Mardelle
28b6444243 Don't initiate a move (keyframes, fades, ...) if mouse movement is very small
svn path=/branches/KDE4/; revision=2725
2008-11-24 05:46:07 +00:00
Jean-Baptiste Mardelle
be66261963 Cleanup some mess introduced by last commit, looking for missing slideshow clips now works
svn path=/branches/KDE4/; revision=2724
2008-11-23 23:32:50 +00:00
Jean-Baptiste Mardelle
228b8f4201 Add recursive search when opening a document with missing clip, heavily based on a patch from Alberto Villa
svn path=/branches/KDE4/; revision=2723
2008-11-23 22:35:59 +00:00
Jean-Baptiste Mardelle
86cb6a211b Small improvement in movement of objects (only move to next or previous frame when mouse is half way between the 2 frames)
svn path=/branches/KDE4/; revision=2722
2008-11-23 19:34:31 +00:00
Jean-Baptiste Mardelle
3d39d7bb33 * Fix issue with fade out length:
http://www.kdenlive.org:80/mantis/view.php?id=391
* Fix default direction of luma transition
* Fix crash on transition deletion
* Fix problem with transition resize

svn path=/branches/KDE4/; revision=2721
2008-11-23 19:13:51 +00:00
Jean-Baptiste Mardelle
e3ba1d3f71 Slightly faster timeline scrolling on clip drag
svn path=/branches/KDE4/; revision=2720
2008-11-22 10:48:29 +00:00
Jean-Baptiste Mardelle
5a72d8b2e0 Warn when overwriting existing video frame image:
http://www.kdenlive.org:80/mantis/view.php?id=389

svn path=/branches/KDE4/; revision=2719
2008-11-22 10:42:52 +00:00
Jean-Baptiste Mardelle
e1e52667c2 indentation fix
svn path=/branches/KDE4/; revision=2718
2008-11-19 23:13:27 +00:00
Jean-Baptiste Mardelle
27e46951a3 Scroll timeline when seeking near a border and also when dragging a clip, should fix:
http://www.kdenlive.org:80/mantis/view.php?id=368

svn path=/branches/KDE4/; revision=2717
2008-11-19 22:46:22 +00:00
Jean-Baptiste Mardelle
834cf8fde3 Fix end transition 1 frame too short:
http://www.kdenlive.org/mantis/view.php?id=364

svn path=/branches/KDE4/; revision=2716
2008-11-19 11:13:31 +00:00
Jean-Baptiste Mardelle
7aed2fb6d8 Fix remaining issues with audio fades:
http://www.kdenlive.org/mantis/view.php?id=258

svn path=/branches/KDE4/; revision=2715
2008-11-19 11:07:48 +00:00
Jean-Baptiste Mardelle
b7f8784570 Fix several audio fade bugs, including
http://www.kdenlive.org/mantis/view.php?id=258

svn path=/branches/KDE4/; revision=2714
2008-11-18 12:36:46 +00:00
Jean-Baptiste Mardelle
8e62fa04cc Shortcuts for zoom actions:
http://www.kdenlive.org/mantis/view.php?id=328

svn path=/branches/KDE4/; revision=2713
2008-11-18 01:02:53 +00:00
Jean-Baptiste Mardelle
0f0a9d1bd2 Updated xml for audio fades
svn path=/branches/KDE4/; revision=2712
2008-11-18 00:34:02 +00:00
Jean-Baptiste Mardelle
bb579bc380 Check if saving is successful before quitting app:
http://www.kdenlive.org/mantis/view.php?id=360

svn path=/branches/KDE4/; revision=2711
2008-11-18 00:29:08 +00:00
Jean-Baptiste Mardelle
46ca2c1b38 * Fix some transition undo problems
* New: allow user to select on which track a transition applies:
http://www.kdenlive.org/mantis/view.php?id=273

svn path=/branches/KDE4/; revision=2710
2008-11-18 00:17:25 +00:00
Jean-Baptiste Mardelle
1315fdcdeb Add *.mod as mpeg extension when installing extra mime types, should fix:
http://www.kdenlive.org/mantis/view.php?id=357

svn path=/branches/KDE4/; revision=2709
2008-11-17 10:11:06 +00:00
Jean-Baptiste Mardelle
30cdea39ec Ask to save profile before closing profiles dialog, default to pal dv when profile is not found.
Should fix:
http://www.kdenlive.org/mantis/view.php?id=354
http://www.kdenlive.org/mantis/view.php?id=359

svn path=/branches/KDE4/; revision=2708
2008-11-17 10:08:44 +00:00
Jean-Baptiste Mardelle
ab13096c99 Update the recordmydesktop config options
svn path=/branches/KDE4/; revision=2707
2008-11-16 16:33:21 +00:00
Jean-Baptiste Mardelle
54e4784d6f Use detected dvgrab path for capture
svn path=/branches/KDE4/; revision=2706
2008-11-15 22:14:38 +00:00
Jean-Baptiste Mardelle
c9f45827c1 Show info message if dvgrab or recordmydesktop is missing
svn path=/branches/KDE4/; revision=2705
2008-11-15 22:10:01 +00:00
Jean-Baptiste Mardelle
7d58b3e254 Screen grab now uses recordmydesktop
svn path=/branches/KDE4/; revision=2704
2008-11-15 21:51:33 +00:00
Jean-Baptiste Mardelle
89a0939d4a * Fix undo of effect editing
* Add widget to adjust position parameter in effects (fade, freeze)

svn path=/branches/KDE4/; revision=2703
2008-11-14 00:10:58 +00:00
209 changed files with 46049 additions and 4549 deletions

View File

@@ -11,12 +11,10 @@ INCLUDE(FindGettext)
include(MacroOptionalAddSubdirectory)
set(catalogname kdenlive)
add_definitions (${QT_DEFINITIONS} ${KDE4_DEFINITIONS})
include_directories (${QDBUS_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${KDE4_INCLUDES} ${CMAKE_SOURCE_DIR}/widgets)
add_definitions (${QT_DEFINITIONS})
FIND_PACKAGE(LIBMLT REQUIRED)
FIND_PACKAGE(LIBMLTPLUS REQUIRED)
FIND_PACKAGE(LIBFFMPEG REQUIRED)
find_package(MSGFMT REQUIRED)
find_program(EXTRACTRC_EXECUTABLE extractrc)
@@ -29,11 +27,13 @@ find_program(XGETTEXT_EXECUTABLE xgettext)
add_subdirectory(src src/cmake_bindir)
add_subdirectory(renderer renderer/cmake_bindir)
add_subdirectory(thumbnailer thumbnailer/cmake_bindir)
add_subdirectory(effects )
add_subdirectory(export )
add_subdirectory(icons )
add_subdirectory(data )
add_subdirectory(plugins)
add_subdirectory(effects)
add_subdirectory(export)
add_subdirectory(icons)
add_subdirectory(data)
add_subdirectory(lumas)
add_subdirectory(po)
add_subdirectory(man)

View File

@@ -1,8 +1,9 @@
#! /bin/sh
EXTRACTRC=`which extractrc`
XGETTEXT="`which xgettext` --kde -ki18n --no-location -s "
# XGETTEXT="`which xgettext` --kde -ki18n --no-location -s "
XGETTEXT="`which xgettext` --kde -ki18n -s "
podir=`pwd`/po
kdenlive_subdirs="src src/widgets renderer `pwd`"
kdenlive_subdirs="src src/widgets renderer"
$EXTRACTRC --tag=name --tag=description --tag=label effects/*.xml >> rc.cpp || exit 11

8
README
View File

@@ -1,8 +1,8 @@
Kdenlive V 0.7 by Jean-Baptiste Mardelle <jb@kdenlive.org>
Kdenlive V 0.7.2 by Jean-Baptiste Mardelle <jb@kdenlive.org>
Kdenlive is a video editing application for KDE.
This is a the first KDE4 release. Please check the
Kdenlive for KDE4. Please check the
project page for more information, and to report new bugs.
http://kdenlive.org
@@ -12,14 +12,14 @@ the following webpage :
http://www.mltframework.org
This version of Kdenlive requires MLT version 0.3.2. It may work with different
This version of Kdenlive requires MLT version >= 0.3.4. It may work with different
versions, but this is not guaranteed, or (at this stage of development) likely.
We welcome all bug reports, feedback and offers for help! so please visit our bugtracker and forums:
Forum:
http://kdenlive.org/bbforum
http://kdenlive.org/forum
Bug Tracker:
http://kdenlive.org/mantis

View File

@@ -1,53 +0,0 @@
#
# Find the FFMPEG includes and library
#
FIND_PROGRAM(FFMPEG_CONFIG_EXECUTABLE pkg-config)
EXEC_PROGRAM(${FFMPEG_CONFIG_EXECUTABLE} ARGS --variable=includedir libavformat OUTPUT_VARIABLE FFMPEG_HEADER_PATH )
#MESSAGE(STATUS "Found FFmpeg header pkg-config: ${FFMPEG_CONFIG_EXECUTABLE} , ${FFMPEG_HEADER_PATH}")
EXEC_PROGRAM(${FFMPEG_CONFIG_EXECUTABLE} ARGS --variable=libdir libavformat OUTPUT_VARIABLE FFMPEG_LIBS_PATH )
#MESSAGE(STATUS "Found FFmpeg lib pkg-config: ${FFMPEG_CONFIG_EXECUTABLE} , ${FFMPEG_LIBS_PATH}")
FIND_PATH(LIBFFMPEG_INCLUDE_DIR
NAMES avformat.h
PATHS ${FFMPEG_HEADER_PATH}/ffmpeg ${FFMPEG_HEADER_PATH}/libavformat ${FFMPEG_HEADER_PATH}/ffmpeg/libavformat
/usr/include/ffmpeg /usr/include/libavformat /usr/include/ffmpeg/libavformat
/usr/local/include/ffmpeg /usr/local/include/libavformat /usr/local/include/ffmpeg/libavformat
NO_DEFAULT_PATH
)
IF (LIBFFMPEG_INCLUDE_DIR)
MESSAGE(STATUS "Found FFmpeg Libavformat includes: ${LIBFFMPEG_INCLUDE_DIR}")
ELSE (LIBFFMPEG_INCLUDE_DIR)
MESSAGE(FATAL_ERROR "\n***************************\n"
"Could not find FFmpeg Libavformat includes\n"
"please install the libavformat-dev package or give the path manually using\n"
"-DLIBFFMPEG_INCLUDE_DIR=PATH_TO_YOUR_AVFORMAT_HEADERS"
"\n***************************\n")
ENDIF (LIBFFMPEG_INCLUDE_DIR)
FIND_LIBRARY(LIBFFMPEG_LIBRARY
NAMES avformat
PATHS ${FFMPEG_LIBS_PATH}
/usr/lib /usr/local/lib
NO_DEFAULT_PATH
)
IF (LIBFFMPEG_LIBRARY)
MESSAGE(STATUS "Found FFmpeg Libavformat library: ${LIBFFMPEG_LIBRARY}")
ELSE (LIBFFMPEG_LIBRARY)
MESSAGE(FATAL_ERROR "\n***************************\n"
"Could not find FFmpeg Libavformat library\n"
"please install the libavformat package or give the path manually using\n"
"-DLIBFFMPEG_LIBRARY=PATH_TO_YOUR_AVFORMAT_LIBRARY"
"\n***************************\n")
ENDIF (LIBFFMPEG_LIBRARY)
IF (LIBFFMPEG_LIBRARY AND LIBFFMPEG_INCLUDE_DIR)
SET( LIBFFMPEG_FOUND 1 )
SET( LIBFFMPEG_LIBRARIES ${LIBFFMPEG_LIBRARY} )
ELSE (LIBFFMPEG_LIBRARY AND LIBFFMPEG_INCLUDE_DIR)
SET( LIBFFMPEG_FOUND 0 )
ENDIF (LIBFFMPEG_LIBRARY AND LIBFFMPEG_INCLUDE_DIR)

View File

@@ -2,6 +2,7 @@
frei0r.squareblur
frei0r.distort0r
frei0r.water
frei0r.facedetect
# duplicate effects
frei0r.gamma

View File

@@ -3,6 +3,7 @@ INSTALL (FILES
automask.xml
boxblur.xml
brightness.xml
channelcopy.xml
charcoal.xml
chroma_hold.xml
chroma.xml
@@ -26,11 +27,16 @@ normalise.xml
obscure.xml
rotation.xml
sepia.xml
sox_bass.xml
sox_gain.xml
sox_phaser.xml
sox_band.xml
sox_echo.xml
sox_flanger.xml
sox_pitch.xml
sox_reverb.xml
sox_vibro.xml
sox_stretch.xml
threshold.xml
volume.xml
wave.xml

6
effects/channelcopy.xml Normal file
View File

@@ -0,0 +1,6 @@
<!DOCTYPE kpartgui>
<effect tag="volume" id="channelcopy" type="audio">
<name>Mono to stereo</name>
<description>Copy the left channel to the right</description>
<author>Dan Dennedy</author>
</effect>

View File

@@ -3,10 +3,10 @@
<name>Fade in</name>
<description>Fade in audio track</description>
<author></author>
<parameter type="position" name="in" max="15000" min="0" default="0">
<name>Duration</name>
<parameter type="fixed" name="in" max="0" min="0" default="0">
<name></name>
</parameter>
<parameter type="position" name="out" max="15000" min="0" default="75">
<parameter type="position" name="out" max="90000" min="0" default="75">
<name>Duration</name>
</parameter>
<parameter type="fixed" name="gain" max="0" min="0" default="0">

View File

@@ -3,11 +3,11 @@
<name>Fade out</name>
<description>Fade in audio track</description>
<author></author>
<parameter type="position" name="in" max="15000" min="0" default="0">
<parameter type="position" name="in" max="0" min="0" default="75">
<name>Duration</name>
</parameter>
<parameter type="position" name="out" max="15000" min="0" default="75">
<name>Duration</name>
<parameter type="fixed" name="out" max="90000" min="0" default="0">
<name></name>
</parameter>
<parameter type="fixed" name="gain" max="1" min="1" default="1">
<name>Start Gain</name>

View File

@@ -4,10 +4,10 @@
<description>LADSPA limiter audio effect</description>
<author>http://www.ladspa.org</author>
<parameter type="constant" name="gain" max="20" min="-20" default="0">
<name>Input gain (db)</name>
<name>Input gain (dB)</name>
</parameter>
<parameter type="constant" name="limit" max="0" min="-20" default="0">
<name>Limit (db)</name>
<name>Limit (dB)</name>
</parameter>
<parameter type="constant" name="release" max="200" min="1" default="50" factor="100">
<name>Release time (s)</name>

12
effects/sox_band.xml Normal file
View File

@@ -0,0 +1,12 @@
<!DOCTYPE kpartgui>
<effect tag="sox" id="sox_band" type="audio">
<name>Sox Band</name>
<description>Sox band audio effect</description>
<author>http://sox.sourceforge.net</author>
<parameter type="constant" name="frequency" max="10000" min="1" default="3000">
<name>Center Frequency</name>
</parameter>
<parameter type="constant" name="width" max="5000" min="1" default="300">
<name>Width</name>
</parameter>
</effect>

12
effects/sox_bass.xml Normal file
View File

@@ -0,0 +1,12 @@
<!DOCTYPE kpartgui>
<effect tag="sox" id="sox_bass" type="audio">
<name>Sox Bass</name>
<description>Sox bass audio effect</description>
<author>http://sox.sourceforge.net</author>
<parameter type="constant" name="gain" max="100" min="1" default="5">
<name>Gain</name>
</parameter>
<parameter type="constant" name="frequency" max="5000" min="1" default="100">
<name>Frequency</name>
</parameter>
</effect>

View File

@@ -4,10 +4,10 @@
<description>Sox echo audio effect</description>
<author>http://sox.sourceforge.net</author>
<parameter type="constant" name="gain-in" max="100" min="0" default="50" factor="100">
<name>Gain in</name>
<name>Gain In</name>
</parameter>
<parameter type="constant" name="gain-out" max="100" min="0" default="100" factor="100">
<name>Gain out</name>
<name>Gain Out</name>
</parameter>
<parameter type="constant" name="delay" max="500" min="100" default="150">
<name>Delay</name>

View File

@@ -4,10 +4,10 @@
<description>Sox flanger audio effect</description>
<author>http://sox.sourceforge.net</author>
<parameter type="constant" name="gain-in" max="100" min="0" default="50" factor="100">
<name>Gain in</name>
<name>Gain In</name>
</parameter>
<parameter type="constant" name="gain-out" max="100" min="0" default="50" factor="100">
<name>Gain out</name>
<name>Gain Out</name>
</parameter>
<parameter type="constant" name="delay" max="500" min="0" default="100" factor="100">
<name>Delay</name>

9
effects/sox_gain.xml Normal file
View File

@@ -0,0 +1,9 @@
<!DOCTYPE kpartgui>
<effect tag="sox" id="sox_gain" type="audio">
<name>Sox Gain</name>
<description>Sox gain audio effect</description>
<author>http://sox.sourceforge.net</author>
<parameter type="constant" name="gain" max="50" min="-50" default="5">
<name>Gain</name>
</parameter>
</effect>

21
effects/sox_phaser.xml Normal file
View File

@@ -0,0 +1,21 @@
<!DOCTYPE kpartgui>
<effect tag="sox" id="sox_phaser" type="audio">
<name>Sox Phaser</name>
<description>Sox phaser audio effect</description>
<author>http://sox.sourceforge.net</author>
<parameter type="constant" name="gainin" max="10" min="1" default="10" factor="10">
<name>Gain In</name>
</parameter>
<parameter type="constant" name="gainout" max="10" min="1" default="10" factor="10">
<name>Gain Out</name>
</parameter>
<parameter type="constant" name="delay" max="5" min="0" default="2">
<name>Delay</name>
</parameter>
<parameter type="constant" name="decay" max="99" min="0" default="80" factor="100">
<name>Decay</name>
</parameter>
<parameter type="constant" name="speed" max="20" min="1" default="10" factor="10">
<name>Speed</name>
</parameter>
</effect>

12
effects/sox_stretch.xml Normal file
View File

@@ -0,0 +1,12 @@
<!DOCTYPE kpartgui>
<effect tag="sox" id="sox_stretch" type="audio">
<name>Sox Stretch</name>
<description>Sox stretch audio effect</description>
<author>http://sox.sourceforge.net</author>
<parameter type="constant" name="factor" max="100" min="0" default="10" factor="10">
<name>Factor</name>
</parameter>
<parameter type="constant" name="window" max="100" min="1" default="20">
<name>Window</name>
</parameter>
</effect>

View File

@@ -1,158 +1,205 @@
<profiles version="0.1">
<group name="HDV" renderer="avformat" extension="m2t" type="av">
<profile name="PAL 1080 50i" standard="PAL" args="f=mpegts ab=384k ar=48000 vcodec=mpeg2video s=1440x1080 b=19700k g=12 profile=hdv_1080_50i" />
<profile name="PAL 720 25p" standard="PAL" args="f=mpegts ab=384k ar=48000 vcodec=mpeg2video s=1280x720 b=19700k g=12 profile=hdv_720_25p" />
<profile name="NTSC 1080 60i" standard="NTSC" args="f=mpegts ab=384k ar=48000 vcodec=mpeg2video s=1440x1080 b=19700k g=15 profile=hdv_1080_60i" />
<profile name="NTSC 720 30p" standard="NTSC" args="f=mpegts ab=384k ar=48000 vcodec=mpeg2video s=1280x720 b=19700k g=15 profile=hdv_720_30p" />
<profile name="PAL 1080 50i" standard="PAL" args="f=mpegts acodec=mp2 ab=384k ar=48000 ac=2 vcodec=mpeg2video s=1440x1080 b=25000k g=12 trellis=1 profile=hdv_1080_50i" />
<profile name="PAL 1080 25p" standard="PAL" args="f=mpegts acodec=mp2 ab=384k ar=48000 ac=2 vcodec=mpeg2video s=1440x1080 b=25000k g=12 trellis=1 profile=hdv_1080_25p" />
<profile name="PAL 720 25p" standard="PAL" args="f=mpegts acodec=mp2 ab=384k ar=48000 ac=2 vcodec=mpeg2video s=1280x720 b=19700k g=12 trellis=1 profile=hdv_720_25p" />
<profile name="NTSC 1080 60i" standard="NTSC" args="f=mpegts acodec=mp2 ab=384k ar=48000 ac=2 vcodec=mpeg2video s=1440x1080 b=25000k g=15 trellis=1 profile=hdv_1080_60i" />
<profile name="NTSC 1080 30p" standard="NTSC" args="f=mpegts acodec=mp2 ab=384k ar=48000 ac=2 vcodec=mpeg2video s=1440x1080 b=25000k g=15 trellis=1 profile=hdv_1080_30p" />
<profile name="NTSC 720 30p" standard="NTSC" args="f=mpegts acodec=mp2 ab=384k ar=48000 ac=2 vcodec=mpeg2video s=1280x720 b=19700k g=15 trellis=1 profile=hdv_720_30p" />
</group>
<group name="DV" renderer="avformat" type="av">
<profile name="PAL Raw" standard="PAL" extension="dv" args="f=dv ildct=1 pix_fmt=yuv420p s=720x576 profile=dv_pal" />
<profile name="PAL Raw DV50" standard="PAL" extension="dv" args="f=dv ildct=1 pix_fmt=yuv422p s=720x576 profile=dv_pal" />
<profile name="PAL AVI" standard="PAL" extension="avi" args="f=avi vcodec=dvvideo ildct=1 pix_fmt=yuv420p acodec=pcm_s16le s=720x576 profile=dv_pal" />
<profile name="PAL AVI DV50" standard="PAL" extension="avi" args="f=avi vcodec=dvvideo ildct=1 pix_fmt=yuv422p s=720x576 profile=dv_pal" />
<group name="Raw DV" renderer="avformat" type="av" extension="dv">
<profile name="DV PAL 4:3" standard="PAL" args="f=dv pix_fmt=yuv420p s=720x576 profile=dv_pal" />
<profile name="DV PAL 16:9" standard="PAL" args="f=dv pix_fmt=yuv420p s=720x576 profile=dv_pal_wide" />
<profile name="DVCPRO25 PAL 4:3" standard="PAL" args="f=dv pix_fmt=yuv411p s=720x576 profile=dv_pal" />
<profile name="DVCPRO25 PAL 16:9" standard="PAL" args="f=dv pix_fmt=yuv411p s=720x576 profile=dv_pal_wide" />
<profile name="DVCPRO50 PAL 4:3" standard="PAL" args="f=dv pix_fmt=yuv422p s=720x576 profile=dv_pal" />
<profile name="DVCPRO50 PAL 16:9" standard="PAL" args="f=dv pix_fmt=yuv422p s=720x576 profile=dv_pal_wide" />
<profile name="NTSC Raw" standard="NTSC" extension="dv" args="f=dv ildct=1 pix_fmt=yuv411p s=720x480 profile=dv_ntsc" />
<profile name="NTSC Raw DV50" standard="NTSC" extension="dv" args="f=dv ildct=1 pix_fmt=yuv422p s=720x480 profile=dv_ntsc" />
<profile name="NTSC AVI" standard="NTSC" extension="avi" args="f=avi vcodec=dvvideo ildct=1 pix_fmt=yuv411p acodec=pcm_s16le s=720x480 profile=dv_ntsc" />
<profile name="NTSC AVI DV50" standard="NTSC" extension="avi" args="f=avi vcodec=dvvideo ildct=1 pix_fmt=yuv422p s=720x480 profile=dv_ntsc" />
<profile name="DV NTSC 4:3" standard="NTSC" args="f=dv pix_fmt=yuv420p s=720x480 profile=dv_ntsc" />
<profile name="DV NTSC 16:9" standard="NTSC" args="f=dv pix_fmt=yuv420p s=720x480 profile=dv_ntsc_wide" />
<profile name="DVCPRO25 NTSC 4:3" standard="NTSC" args="f=dv pix_fmt=yuv411p s=720x480 profile=dv_ntsc" />
<profile name="DVCPRO25 NTSC 16:9" standard="NTSC" args="f=dv pix_fmt=yuv411p s=720x480 profile=dv_ntsc_wide" />
<profile name="DVCPRO50 NTSC 4:3" standard="NTSC" args="f=dv pix_fmt=yuv422p s=720x480 profile=dv_ntsc" />
<profile name="DVCPRO50 NTSC 16:9" standard="NTSC" args="f=dv pix_fmt=yuv422p s=720x480 profile=dv_ntsc_wide" />
</group>
<group name="AVI DV" renderer="avformat" type="av" extension="avi">
<profile name="DV PAL 4:3" standard="PAL" args="f=avi vcodec=dvvideo pix_fmt=yuv420p acodec=pcm_s16le s=720x576 profile=dv_pal" />
<profile name="DV PAL 16:9" standard="PAL" args="f=avi vcodec=dvvideo pix_fmt=yuv420p acodec=pcm_s16le s=720x576 profile=dv_pal_wide" />
<profile name="DVCPRO25 PAL 4:3" standard="PAL" args="f=avi vcodec=dvvideo pix_fmt=yuv411p acodec=pcm_s16le s=720x576 profile=dv_pal" />
<profile name="DVCPRO25 PAL 16:9" standard="PAL" args="f=avi vcodec=dvvideo pix_fmt=yuv411p acodec=pcm_s16le s=720x576 profile=dv_pal_wide" />
<profile name="DVCPRO50 PAL 4:3" standard="PAL" args="f=avi vcodec=dvvideo pix_fmt=yuv422p acodec=pcm_s16le s=720x576 profile=dv_pal" />
<profile name="DVCPRO50 PAL 16:9" standard="PAL" args="f=avi vcodec=dvvideo pix_fmt=yuv422p acodec=pcm_s16le s=720x576 profile=dv_pal_wide" />
<profile name="DV NTSC 4:3" standard="NTSC" args="f=avi vcodec=dvvideo pix_fmt=yuv411p acodec=pcm_s16le s=720x480 profile=dv_ntsc" />
<profile name="DV NTSC 16:9" standard="NTSC" args="f=avi vcodec=dvvideo pix_fmt=yuv411p acodec=pcm_s16le s=720x480 profile=dv_ntsc_wide" />
<profile name="DVCPRO25 NTSC 4:3" standard="NTSC" args="f=avi vcodec=dvvideo pix_fmt=yuv411p acodec=pcm_s16le s=720x480 profile=dv_ntsc" />
<profile name="DVCPRO25 NTSC 16:9" standard="NTSC" args="f=avi vcodec=dvvideo pix_fmt=yuv411p acodec=pcm_s16le s=720x480 profile=dv_ntsc_wide" />
<profile name="DVCPRO50 NTSC 4:3" standard="NTSC" args="f=avi vcodec=dvvideo pix_fmt=yuv422p acodec=pcm_s16le s=720x480 profile=dv_ntsc" />
<profile name="DVCPRO50 NTSC 16:9" standard="NTSC" args="f=avi vcodec=dvvideo pix_fmt=yuv422p acodec=pcm_s16le s=720x480 profile=dv_ntsc_wide" />
</group>
<group name="DVD" renderer="avformat" type="av">
<profile name="PAL 4:3 vob" standard="PAL" extension="vob" args="f=dvd vcodec=mpeg2video acodec=ac3 b=5000k maxrate=8000000 minrate=0 bufsize=1835008 mux_packet_s=2048 mux_rate=10080000 ab=192000 ar=48000 s=720x576 g=15 me_range=63 profile=dv_pal" />
<profile name="PAL 16:9 vob" standard="PAL" extension="vob" args="f=dvd vcodec=mpeg2video acodec=ac3 b=5000k maxrate=8000000 minrate=0 bufsize=1835008 mux_packet_s=2048 mux_rate=10080000 ab=192000 ar=48000 s=720x576 g=15 me_range=63 profile=dv_pal_wide" />
<profile name="NTSC 4:3 vob" standard="NTSC" extension="vob" args="f=dvd vcodec=mpeg2video acodec=ac3 s=720x480 b=6000k maxrate=9000000 minrate=0 bufsize=1835008 mux_packet_s=2048 mux_rate=10080000 ab=192000 ar=48000 g=18 me_range=63 profile=dv_ntsc" />
<profile name="NTSC 16:9 vob" standard="NTSC" extension="vob" args="f=dvd vcodec=mpeg2video acodec=ac3 s=720x480 b=6000k maxrate=9000000 minrate=0 bufsize=1835008 mux_packet_s=2048 mux_rate=10080000 ab=192000 ar=48000 g=18 me_range=63 profile=dv_ntsc_wide" />
<groupname id="dvd">DVD</groupname>
<profile name="PAL 4:3 vob" standard="PAL" extension="vob" args="f=dvd vcodec=mpeg2video acodec=ac3 b=5000k maxrate=8000k minrate=0 bufsize=1835008 mux_packet_s=2048 mux_rate=10080000 ab=192k ar=48000 s=720x576 g=15 me_range=63 trellis=1 profile=dv_pal" />
<profile name="PAL 16:9 vob" standard="PAL" extension="vob" args="f=dvd vcodec=mpeg2video acodec=ac3 b=5000k maxrate=8000k minrate=0 bufsize=1835008 mux_packet_s=2048 mux_rate=10080000 ab=192k ar=48000 s=720x576 g=15 me_range=63 trellis=1 profile=dv_pal_wide" />
<profile name="NTSC 4:3 vob" standard="NTSC" extension="vob" args="f=dvd vcodec=mpeg2video acodec=ac3 s=720x480 b=6000k maxrate=9000k minrate=0 bufsize=1835008 mux_packet_s=2048 mux_rate=10080000 ab=192k ar=48000 g=18 me_range=63 trellis=1 profile=dv_ntsc" />
<profile name="NTSC 16:9 vob" standard="NTSC" extension="vob" args="f=dvd vcodec=mpeg2video acodec=ac3 s=720x480 b=6000k maxrate=9000k minrate=0 bufsize=1835008 mux_packet_s=2048 mux_rate=10080000 ab=192k ar=48000 g=18 me_range=63 trellis=1 profile=dv_ntsc_wide" />
</group>
<group name="Web sites" renderer="avformat" type="av">
<profile name="Dailymotion 320x240" extension="flv" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=800k s=320x240 aspect=%dar trell=1" />
<profile name="Dailymotion 512x384" extension="mp4" args="f=mp4 acodec=libfaac ab=96k ar=44100 vcodec=libx264 minrate=0 b=600k s=512x384 aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="Dailymotion 1280x720" extension="mp4" args="f=mp4 acodec=libfaac ab=96k ar=44100 vcodec=libx264 minrate=0 b=1500k s=1280x720 aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="Vimeo 640x480" extension="mp4" args="f=mp4 acodec=libfaac ab=128k ar=44100 vcodec=libx264 minrate=0 b=3000k s=640x480 aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="Vimeo 1280x720" extension="mp4" args="f=mp4 acodec=libfaac ab=128k ar=44100 vcodec=libx264 minrate=0 b=5000k s=1280x720 aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="Youtube 640x480" extension="flv" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=800k s=640x480 aspect=%dar trell=1" />
<group name="MPEG-2" renderer="avformat" extension="mpg" type="av">
<profile name="MPEG-2 200k" args="f=mpeg acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=200k bf=2 b_strategy=1 trellis=1 aspect=%dar" />
<profile name="MPEG-2 400k" args="f=mpeg acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=400k bf=2 b_strategy=1 trellis=1 aspect=%dar" />
<profile name="MPEG-2 600k" args="f=mpeg acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=600k bf=2 b_strategy=1 trellis=1 aspect=%dar" />
<profile name="MPEG-2 800k" args="f=mpeg acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=800k bf=2 b_strategy=1 trellis=1 aspect=%dar" />
<profile name="MPEG-2 1000k" args="f=mpeg acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=1000k bf=2 b_strategy=1 trellis=1 aspect=%dar" />
<profile name="MPEG-2 2000k" args="f=mpeg acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=2000k bf=2 b_strategy=1 trellis=1 aspect=%dar" />
<profile name="MPEG-2 4000k" args="f=mpeg acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=4000k bf=2 b_strategy=1 trellis=1 aspect=%dar" />
<profile name="MPEG-2 6000k" args="f=mpeg acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=6000k bf=2 b_strategy=1 trellis=1 aspect=%dar" />
<profile name="MPEG-2 8000k" args="f=mpeg acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=8000k bf=2 b_strategy=1 trellis=1 aspect=%dar" />
<profile name="MPEG-2 1000k" args="f=mpeg acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=10000k bf=2 b_strategy=1 trellis=1 aspect=%dar" />
<profile name="MPEG-2 12000k" args="f=mpeg acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=12000k bf=2 b_strategy=1 trellis=1 aspect=%dar" />
<profile name="MPEG-2 18000k" args="f=mpeg acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=18000k bf=2 b_strategy=1 trellis=1 aspect=%dar" />
<profile name="MPEG-2 25000k" args="f=mpeg acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=25000k bf=2 b_strategy=1 trellis=1 aspect=%dar" />
</group>
<group name="Mpeg4" renderer="avformat" extension="mp4" type="av">
<profile name="Mpeg4 200k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=200k s=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="Mpeg4 400k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=400k s=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="Mpeg4 600k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=600k s=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="Mpeg4 800k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=800k s=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="Mpeg4 1000k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=1000k s=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="Mpeg4 2000k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=2000k s=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="Mpeg4 4000k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=4000k s=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="Mpeg4 6000k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=6000k s=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="Mpeg4 8000k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=8000k s=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="Mpeg4 10000k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=10000k s=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="Mpeg4 12000k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=12000k s=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<group name="MPEG-4" renderer="avformat" extension="mp4" type="av">
<profile name="MPEG-4 200k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=200k aspect=%dar mbd=2 trellis=1 mv4=1" />
<profile name="MPEG-4 400k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=400k aspect=%dar mbd=2 trellis=1 mv4=1" />
<profile name="MPEG-4 600k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=600k aspect=%dar mbd=2 trellis=1 mv4=1" />
<profile name="MPEG-4 800k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=800k aspect=%dar mbd=2 trellis=1 mv4=1" />
<profile name="MPEG-4 1000k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=1000k aspect=%dar mbd=2 trellis=1 mv4=1" />
<profile name="MPEG-4 2000k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=2000k aspect=%dar mbd=2 trellis=1 mv4=1" />
<profile name="MPEG-4 4000k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=4000k aspect=%dar mbd=2 trellis=1 mv4=1" />
<profile name="MPEG-4 6000k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=6000k aspect=%dar mbd=2 trellis=1 mv4=1" />
<profile name="MPEG-4 8000k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=8000k aspect=%dar mbd=2 trellis=1 mv4=1" />
<profile name="MPEG-4 10000k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=10000k aspect=%dar mbd=2 trellis=1 mv4=1" />
<profile name="MPEG-4 12000k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=12000k aspect=%dar mbd=2 trellis=1 mv4=1" />
<profile name="MPEG-4 18000k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=12000k aspect=%dar mbd=2 trellis=1 mv4=1" />
<profile name="MPEG-4 25000k" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=12000k aspect=%dar mbd=2 trellis=1 mv4=1" />
</group>
<group name="XVid4" renderer="avformat" extension="avi" type="av">
<profile name="XVid4 200k" args="acodec=libmp3lame ab=128k ar=44100 vcodec=libxvid minrate=0 b=200k s=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="XVid4 400k" args="acodec=libmp3lame ab=128k ar=44100 vcodec=libxvid minrate=0 b=200k s=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="XVid4 600k" args="acodec=libmp3lame ab=128k ar=44100 vcodec=libxvid minrate=0 b=200k s=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="XVid4 800k" args="acodec=libmp3lame ab=128k ar=44100 vcodec=libxvid minrate=0 b=200k s=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="XVid4 1000k" args="acodec=libmp3lame ab=128k ar=44100 vcodec=libxvid minrate=0 b=200k s=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="XVid4 2000k" args="acodec=libmp3lame ab=128k ar=44100 vcodec=libxvid minrate=0 b=200k s=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="XVid4 4000k" args="acodec=libmp3lame ab=128k ar=44100 vcodec=libxvid minrate=0 b=200k s=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="XVid4 6000k" args="acodec=libmp3lame ab=128k ar=44100 vcodec=libxvid minrate=0 b=200k s=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="XVid4 8000k" args="acodec=libmp3lame ab=128k ar=44100 vcodec=libxvid minrate=0 b=200k s=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="XVid4 10000k" args="acodec=libmp3lame ab=128k ar=44100 vcodec=libxvid minrate=0 b=200k s=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="XVid4 12000k" args="acodec=libmp3lame ab=128k ar=44100 vcodec=libxvid minrate=0 b=200k s=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="XVid4 200k" args="acodec=libmp3lame ab=128k ar=44100 vcodec=libxvid minrate=0 b=200k aspect=%dar mbd=2 trellis=1 mv4=1" />
<profile name="XVid4 400k" args="acodec=libmp3lame ab=128k ar=44100 vcodec=libxvid minrate=0 b=400k aspect=%dar mbd=2 trellis=1 mv4=1" />
<profile name="XVid4 600k" args="acodec=libmp3lame ab=128k ar=44100 vcodec=libxvid minrate=0 b=600k aspect=%dar mbd=2 trellis=1 mv4=1" />
<profile name="XVid4 800k" args="acodec=libmp3lame ab=128k ar=44100 vcodec=libxvid minrate=0 b=800k aspect=%dar mbd=2 trellis=1 mv4=1" />
<profile name="XVid4 1000k" args="acodec=libmp3lame ab=128k ar=44100 vcodec=libxvid minrate=0 b=1000k aspect=%dar mbd=2 trellis=1 mv4=1" />
<profile name="XVid4 2000k" args="acodec=libmp3lame ab=128k ar=44100 vcodec=libxvid minrate=0 b=2000k aspect=%dar mbd=2 trellis=1 mv4=1" />
<profile name="XVid4 4000k" args="acodec=libmp3lame ab=128k ar=44100 vcodec=libxvid minrate=0 b=4000k aspect=%dar mbd=2 trellis=1 mv4=1" />
<profile name="XVid4 6000k" args="acodec=libmp3lame ab=128k ar=44100 vcodec=libxvid minrate=0 b=6000k aspect=%dar mbd=2 trellis=1 mv4=1" />
<profile name="XVid4 8000k" args="acodec=libmp3lame ab=128k ar=44100 vcodec=libxvid minrate=0 b=8000k aspect=%dar mbd=2 trellis=1 mv4=1" />
<profile name="XVid4 10000k" args="acodec=libmp3lame ab=128k ar=44100 vcodec=libxvid minrate=0 b=10000k aspect=%dar mbd=2 trellis=1 mv4=1" />
<profile name="XVid4 12000k" args="acodec=libmp3lame ab=128k ar=44100 vcodec=libxvid minrate=0 b=12000k aspect=%dar mbd=2 trellis=1 mv4=1" />
</group>
<group name="h264" renderer="avformat" extension="mp4" type="av">
<profile name="h264 200k" args="f=mp4 hq=1 acodec=libfaac ab=128k ar=44100 vcodec=libx264 minrate=0 b=200k size=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="h264 400k" args="f=mp4 hq=1 acodec=libfaac ab=128k ar=44100 vcodec=libx264 minrate=0 b=400k size=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="h264 600k" args="f=mp4 hq=1 acodec=libfaac ab=128k ar=44100 vcodec=libx264 minrate=0 b=600k size=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="h264 800k" args="f=mp4 hq=1 acodec=libfaac ab=128k ar=44100 vcodec=libx264 minrate=0 b=800k size=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="h264 1000k" args="f=mp4 hq=1 acodec=libfaac ab=128k ar=44100 vcodec=libx264 minrate=0 b=1000k size=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="h264 2000k" args="f=mp4 hq=1 acodec=libfaac ab=128k ar=44100 vcodec=libx264 minrate=0 b=2000k size=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="h264 4000k" args="f=mp4 hq=1 acodec=libfaac ab=128k ar=44100 vcodec=libx264 minrate=0 b=4000k size=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="h264 6000k" args="f=mp4 hq=1 acodec=libfaac ab=128k ar=44100 vcodec=libx264 minrate=0 b=6000k size=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="h264 8000k" args="f=mp4 hq=1 acodec=libfaac ab=128k ar=44100 vcodec=libx264 minrate=0 b=8000k size=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="h264 10000k" args="f=mp4 hq=1 acodec=libfaac ab=384k ar=44100 vcodec=libx264 minrate=0 b=10000k size=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<profile name="h264 12000k" args="f=mp4 hq=1 acodec=libfaac ab=384k ar=44100 vcodec=libx264 minrate=0 b=12000k size=%widthx%height aspect=%dar mbd=2 trell=1 mv4=1" />
<group name="H.264" renderer="avformat" extension="mp4" type="av">
<profile name="H.264 200k" args="f=mp4 hq=1 acodec=libfaac ab=128k ar=48000 pix_fmt=yuv420p vcodec=libx264 minrate=0 b=200k b_strategy=1 subcmp=2 cmp=2 coder=1 flags=+loop flags2=dct8x8 qmax=51 crf=1 trellis=1 aspect=%dar" />
<profile name="H.264 400k" args="f=mp4 hq=1 acodec=libfaac ab=128k ar=48000 pix_fmt=yuv420p vcodec=libx264 minrate=0 b=400k b_strategy=1 subcmp=2 cmp=2 coder=1 flags=+loop flags2=dct8x8 qmax=51 crf=1 trellis=1 aspect=%dar" />
<profile name="H.264 600k" args="f=mp4 hq=1 acodec=libfaac ab=128k ar=48000 pix_fmt=yuv420p vcodec=libx264 minrate=0 b=600k b_strategy=1 subcmp=2 cmp=2 coder=1 flags=+loop flags2=dct8x8 qmax=51 crf=1 trellis=1 aspect=%dar" />
<profile name="H.264 800k" args="f=mp4 hq=1 acodec=libfaac ab=128k ar=48000 pix_fmt=yuv420p vcodec=libx264 minrate=0 b=800k b_strategy=1 subcmp=2 cmp=2 coder=1 flags=+loop flags2=dct8x8 qmax=51 crf=1 trellis=1 aspect=%dar" />
<profile name="H.264 1000k" args="f=mp4 hq=1 acodec=libfaac ab=128k ar=48000 pix_fmt=yuv420p vcodec=libx264 minrate=0 b=1000k b_strategy=1 subcmp=2 cmp=2 coder=1 flags=+loop flags2=dct8x8 qmax=51 crf=1 trellis=1 aspect=%dar" />
<profile name="H.264 2000k" args="f=mp4 hq=1 acodec=libfaac ab=128k ar=48000 pix_fmt=yuv420p vcodec=libx264 minrate=0 b=2000k b_strategy=1 subcmp=2 cmp=2 coder=1 flags=+loop flags2=dct8x8 qmax=51 crf=1 trellis=1 aspect=%dar" />
<profile name="H.264 4000k" args="f=mp4 hq=1 acodec=libfaac ab=128k ar=48000 pix_fmt=yuv420p vcodec=libx264 minrate=0 b=4000k b_strategy=1 subcmp=2 cmp=2 coder=1 flags=+loop flags2=dct8x8 qmax=51 crf=1 trellis=1 aspect=%dar" />
<profile name="H.264 6000k" args="f=mp4 hq=1 acodec=libfaac ab=128k ar=48000 pix_fmt=yuv420p vcodec=libx264 minrate=0 b=6000k b_strategy=1 subcmp=2 cmp=2 coder=1 flags=+loop flags2=dct8x8 qmax=51 crf=1 trellis=1 aspect=%dar" />
<profile name="H.264 8000k" args="f=mp4 hq=1 acodec=libfaac ab=128k ar=48000 pix_fmt=yuv420p vcodec=libx264 minrate=0 b=8000k b_strategy=1 subcmp=2 cmp=2 coder=1 flags=+loop flags2=dct8x8 qmax=51 crf=1 trellis=1 aspect=%dar" />
<profile name="H.264 10000k" args="f=mp4 hq=1 acodec=libfaac ab=384k ar=48000 pix_fmt=yuv420p vcodec=libx264 minrate=0 b=10000k b_strategy=1 subcmp=2 cmp=2 coder=1 flags=+loop flags2=dct8x8 qmax=51 crf=1 trellis=1 aspect=%dar" />
<profile name="H.264 12000k" args="f=mp4 hq=1 acodec=libfaac ab=384k ar=48000 pix_fmt=yuv420p vcodec=libx264 minrate=0 b=12000k b_strategy=1 subcmp=2 cmp=2 coder=1 flags=+loop flags2=dct8x8 qmax=51 crf=1 trellis=1 aspect=%dar" />
<profile name="H.264 18000k" args="f=mp4 hq=1 acodec=libfaac ab=384k ar=48000 pix_fmt=yuv420p vcodec=libx264 minrate=0 b=18000k b_strategy=1 subcmp=2 cmp=2 coder=1 flags=+loop flags2=dct8x8 qmax=51 crf=1 trellis=1 aspect=%dar" />
<profile name="H.264 25000k" args="f=mp4 hq=1 acodec=libfaac ab=384k ar=48000 pix_fmt=yuv420p vcodec=libx264 minrate=0 b=25000k b_strategy=1 subcmp=2 cmp=2 coder=1 flags=+loop flags2=dct8x8 qmax=51 crf=1 trellis=1 aspect=%dar" />
</group>
<group name="Flash" renderer="avformat" extension="flv" type="av">
<profile name="Flash 200k" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=200k s=%widthx%height" />
<profile name="Flash 400k" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=400k s=%widthx%height" />
<profile name="Flash 600k" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=600k s=%widthx%height" />
<profile name="Flash 800k" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=800k s=%widthx%height" />
<profile name="Flash 1000k" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=1000k s=%widthx%height" />
<profile name="Flash 2000k" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=2000k s=%widthx%height" />
<profile name="Flash 4000k" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=4000k s=%widthx%height" />
<profile name="Flash 6000k" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=6000k s=%widthx%height" />
<profile name="Flash 8000k" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=8000k s=%widthx%height" />
<profile name="Flash 10000k" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=10000k s=%widthx%height" />
<profile name="Flash 12000k" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=12000k s=%widthx%height" />
<profile name="Flash 200k" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=200k" />
<profile name="Flash 400k" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=400k" />
<profile name="Flash 600k" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=600k" />
<profile name="Flash 800k" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=800k" />
<profile name="Flash 1000k" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=1000k" />
<profile name="Flash 2000k" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=2000k" />
<profile name="Flash 4000k" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=4000k" />
<profile name="Flash 6000k" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=6000k" />
<profile name="Flash 8000k" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=8000k" />
<profile name="Flash 10000k" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=10000k" />
<profile name="Flash 12000k" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=12000k" />
<profile name="Flash 720x576" standard="PAL" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=12000k s=720x576" />
<profile name="Flash 720x480" standard="NTSC" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=12000k s=720x480" />
</group>
<group name="RealVideo" renderer="avformat" extension="rm" type="av">
<profile name="RealVideo 200k" args="f=rv10 minrate=0 b=200k ab=128k ar=44100 s=%widthx%height g=8" />
<profile name="RealVideo 400k" args="f=rv10 minrate=0 b=400k ab=128k ar=44100 s=%widthx%height g=8" />
<profile name="RealVideo 600k" args="f=rv10 minrate=0 b=600k ab=128k ar=44100 s=%widthx%height g=8" />
<profile name="RealVideo 800k" args="f=rv10 minrate=0 b=800k ab=128k ar=44100 s=%widthx%height g=8" />
<profile name="RealVideo 1000k" args="f=rv10 minrate=0 b=1000k ab=128k ar=44100 s=%widthx%height g=8" />
<profile name="RealVideo 2000k" args="f=rv10 minrate=0 b=2000k ab=128k ar=44100 s=%widthx%height g=8" />
<profile name="RealVideo 4000k" args="f=rv10 minrate=0 b=4000k ab=128k ar=44100 s=%widthx%height g=8" />
<profile name="RealVideo 6000k" args="f=rv10 minrate=0 b=6000k ab=128k ar=44100 s=%widthx%height g=8" />
<profile name="RealVideo 8000k" args="f=rv10 minrate=0 b=8000k ab=128k ar=44100 s=%widthx%height g=8" />
<profile name="RealVideo 10000k" args="f=rv10 minrate=0 b=10000k ab=128k ar=44100 s=%widthx%height g=8" />
<profile name="RealVideo 12000k" args="f=rv10 minrate=0 b=12000k ab=128k ar=44100 s=%widthx%height g=8" />
<profile name="RealVideo 720x576" standard="PAL" args="f=rv10 minrate=0 b=12000k ab=384k ar=48000 s=720x576 g=8" />
<profile name="RealVideo 720x480" standard="NTSC" args="f=rv10 minrate=0 b=12000k ab=384k ar=48000 s=720x480 g=8" />
<profile name="RealVideo 200k" args="vcodec=rv20 acodec=ac3 minrate=0 b=200k ab=128k ar=44100 g=8" />
<profile name="RealVideo 400k" args="vcodec=rv20 acodec=ac3 minrate=0 b=400k ab=128k ar=44100 g=8" />
<profile name="RealVideo 600k" args="vcodec=rv20 acodec=ac3 minrate=0 b=600k ab=128k ar=44100 g=8" />
<profile name="RealVideo 800k" args="vcodec=rv20 acodec=ac3 minrate=0 b=800k ab=128k ar=44100 g=8" />
<profile name="RealVideo 1000k" args="vcodec=rv20 acodec=ac3 minrate=0 b=1000k ab=128k ar=44100 g=8" />
<profile name="RealVideo 2000k" args="vcodec=rv20 acodec=ac3 minrate=0 b=2000k ab=128k ar=44100 g=8" />
<profile name="RealVideo 4000k" args="vcodec=rv20 acodec=ac3 minrate=0 b=4000k ab=128k ar=44100 g=8" />
<profile name="RealVideo 6000k" args="vcodec=rv20 acodec=ac3 minrate=0 b=6000k ab=128k ar=44100 g=8" />
<profile name="RealVideo 8000k" args="vcodec=rv20 acodec=ac3 minrate=0 b=8000k ab=128k ar=44100 g=8" />
<profile name="RealVideo 10000k" args="vcodec=rv20 acodec=ac3 minrate=0 b=10000k ab=128k ar=44100 g=8" />
<profile name="RealVideo 12000k" args="vcodec=rv20 acodec=ac3 minrate=0 b=12000k ab=128k ar=44100 g=8" />
<profile name="RealVideo 720x576" standard="PAL" args="vcodec=rv20 acodec=ac3 minrate=0 b=12000k ab=384k ar=48000 s=720x576 g=8" />
<profile name="RealVideo 720x480" standard="NTSC" args="vcodec=rv20 acodec=ac3 minrate=0 b=12000k ab=384k ar=48000 s=720x480 g=8" />
</group>
<group name="Theora" renderer="avformat" extension="ogg" type="av">
<profile name="Theora 200k" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=200k s=%widthx%height aspect=%dar" />
<profile name="Theora 400k" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=400k s=%widthx%height aspect=%dar" />
<profile name="Theora 600k" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=600k s=%widthx%height aspect=%dar" />
<profile name="Theora 800k" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=800k s=%widthx%height aspect=%dar" />
<profile name="Theora 1000k" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=1000k s=%widthx%height aspect=%dar" />
<profile name="Theora 2000k" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=2000k s=%widthx%height aspect=%dar" />
<profile name="Theora 4000k" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=4000k s=%widthx%height aspect=%dar" />
<profile name="Theora 6000k" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=6000k s=%widthx%height aspect=%dar" />
<profile name="Theora 8000k" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=8000k s=%widthx%height aspect=%dar" />
<profile name="Theora 10000k" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=10000k s=%widthx%height aspect=%dar" />
<profile name="Theora 12000k" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=12000k s=%widthx%height aspect=%dar" />
<profile name="Theora 200k" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=200k aspect=%dar" />
<profile name="Theora 400k" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=400k aspect=%dar" />
<profile name="Theora 600k" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=600k aspect=%dar" />
<profile name="Theora 800k" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=800k aspect=%dar" />
<profile name="Theora 1000k" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=1000k aspect=%dar" />
<profile name="Theora 2000k" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=2000k aspect=%dar" />
<profile name="Theora 4000k" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=4000k aspect=%dar" />
<profile name="Theora 6000k" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=6000k aspect=%dar" />
<profile name="Theora 8000k" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=8000k aspect=%dar" />
<profile name="Theora 10000k" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=10000k aspect=%dar" />
<profile name="Theora 12000k" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=12000k aspect=%dar" />
<profile name="Theora 720x576" standard="PAL" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=12000k s=720x576 aspect=%dar" />
<profile name="Theora 720x480" standard="NTSC" args="acodec=vorbis ab=128k ar=44100 vcodec=libtheora minrate=0 b=12000k s=720x480 aspect=%dar" />
</group>
<group name="Mpeg2ts" renderer="avformat" extension="m2t" type="av">
<profile name="Mpeg2ts 200k" args="f=mpegts acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=200k s=%widthx%height aspect=%dar" />
<profile name="Mpeg2ts 400k" args="f=mpegts acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=400k s=%widthx%height aspect=%dar" />
<profile name="Mpeg2ts 600k" args="f=mpegts acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=600k s=%widthx%height aspect=%dar" />
<profile name="Mpeg2ts 800k" args="f=mpegts acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=800k s=%widthx%height aspect=%dar" />
<profile name="Mpeg2ts 1000k" args="f=mpegts acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=1000k s=%widthx%height aspect=%dar" />
<profile name="Mpeg2ts 2000k" args="f=mpegts acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=2000k s=%widthx%height aspect=%dar" />
<profile name="Mpeg2ts 4000k" args="f=mpegts acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=4000k s=%widthx%height aspect=%dar" />
<profile name="Mpeg2ts 6000k" args="f=mpegts acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=6000k s=%widthx%height aspect=%dar" />
<profile name="Mpeg2ts 8000k" args="f=mpegts acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=8000k s=%widthx%height aspect=%dar" />
<profile name="Mpeg2ts 1000k" args="f=mpegts acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=10000k s=%widthx%height aspect=%dar" />
<profile name="Mpeg2ts 12000k" args="f=mpegts acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=12000k s=%widthx%height aspect=%dar" />
<profile name="Mpeg2ts 18000k" args="f=mpegts acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=18000k s=%widthx%height aspect=%dar" />
<profile name="Mpeg2ts 720x576" standard="PAL" args="f=mpegts acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=12000k s=720x576 aspect=%dar" />
<profile name="Mpeg2ts 720x480" standard="NTSC" args="f=mpegts acodec=mp2 ab=384k ar=48000 vcodec=mpeg2video minrate=0 b=12000k s=720x480 aspect=%dar" />
<group name="Media players" renderer="avformat" type="av">
<groupname id="mediaplayers">Media players</groupname>
<profile name="Windows Media Player wmv7 400k" extension="avi" args="acodec=libmp3lame ab=128k ar=48000 ac=2 vcodec=wmv1 minrate=0 b=400k aspect=%dar" />
<profile name="Windows Media Player wmv7 1000k" extension="avi" args="acodec=libmp3lame ab=128k ar=48000 ac=2 vcodec=wmv1 minrate=0 b=1000k aspect=%dar" />
<profile name="Windows Media Player wmv7 2000k" extension="avi" args="acodec=libmp3lame ab=128k ar=48000 ac=2 vcodec=wmv1 minrate=0 b=2000k aspect=%dar" />
<profile name="Apple Quicktime Player Mpeg4 400k" extension="mov" args="acodec=libfaac ab=128k ac=2 ar=48000 vcodec=mpeg4 minrate=0 b=400k aspect=%dar" />
<profile name="Apple Quicktime Player Mpeg4 1000k" extension="mov" args="acodec=libfaac ab=128k ac=2 ar=48000 vcodec=mpeg4 minrate=0 b=2000k aspect=%dar" />
<profile name="Apple Quicktime Player Mpeg4 2000k" extension="mov" args="acodec=libfaac ab=128k ac=2 ar=48000 vcodec=mpeg4 minrate=0 b=2000k aspect=%dar" />
</group>
<group name="Web sites" renderer="avformat" type="av">
<groupname id="websites">Web sites</groupname>
<profile name="Dailymotion 320x240" extension="flv" args="f=flv acodec=libmp3lame ab=128k ar=44100 vcodec=flv minrate=0 b=800k s=320x240 aspect=%dar trellis=1" url="http://www.dailymotion.com/upload" />
<profile name="Dailymotion 512x384" extension="mp4" args="f=mp4 acodec=libfaac ab=96k ar=44100 vcodec=libx264 minrate=0 b=600k s=512x384 aspect=%dar mbd=2 trellis=1 mv4=1" url="http://www.dailymotion.com/upload" />
<profile name="Dailymotion 1280x720" extension="mp4" args="f=mp4 acodec=libfaac ab=96k ar=44100 vcodec=libx264 minrate=0 b=1500k s=1280x720 aspect=%dar mbd=2 trellis=1 mv4=1" url="http://www.dailymotion.com/upload" />
<profile name="Vimeo 640x480" extension="mp4" args="f=mp4 acodec=libfaac ab=128k ar=44100 vcodec=libx264 minrate=0 b=3000k s=640x480 aspect=%dar mbd=2 trellis=1 mv4=1" url="http://www.vimeo.com/upload" />
<profile name="Vimeo 1280x720" extension="mp4" args="f=mp4 acodec=libfaac ab=128k ar=44100 vcodec=libx264 minrate=0 b=5000k s=1280x720 aspect=%dar mbd=2 trellis=1 mv4=1" url="http://www.vimeo.com/upload" />
<profile name="Youtube 640x480" extension="mp4" args="f=mp4 acodec=libmp3lame ab=128k ar=44100 vcodec=mpeg4 minrate=0 b=800k s=640x480 aspect=%dar mbd=2 trellis=1 mv4=1" url="http://www.youtube.com/upload" />
<profile name="Youtube 1290x720" extension="mp4" args="f=mp4 hq=1 acodec=libfaac ab=128k ar=41100 vcodec=mpeg4 minrate=0 b=2000k s=1290x720 aspect=%dar mbd=2 trellis=1 mv4=1" url="http://www.youtube.com/upload" />
</group>
<group name="Wav" renderer="avformat" type="audio">
<profile name="22050" extension="wav" args="f=wav ar=22050" />
<profile name="32000" extension="wav" args="f=wav ar=32000" />
<profile name="44100" extension="wav" args="f=wav ar=44100" />
<profile name="48000" extension="wav" args="f=wav ar=48000" />
<groupname id="audioonly">Audio only</groupname>
<profile name="wav 22050" extension="wav" args="f=wav ar=22050" />
<profile name="wav 32000" extension="wav" args="f=wav ar=32000" />
<profile name="wav 44100" extension="wav" args="f=wav ar=44100" />
<profile name="wav 48000" extension="wav" args="f=wav ar=48000" />
</group>
<group name="Lossless" renderer="avformat" type="av">
<profile name="ffv1 (video) + flac (sound)" extension="avi" args="f=avi acodec=flac acodec=flac ar=48000 ab=1024k vcodec=ffv1 qscale=255 aspect=%dar" />
<profile name="huffyuv (video) + pcm_s16le (sound)" extension="avi" args="f=avi acodec=pcm_s16le vcodec=huffyuv aspect=%dar" />
<group name="Lossless/HQ" renderer="avformat" type="av">
<groupname id="lossless">Lossless / HQ</groupname>
<profile name="ffv1 lossless (video) + flac (sound)" extension="mp4" args="f=mp4 acodec=flac acodec=flac ar=48000 ab=1024k ac=2 vcodec=ffv1 qscale=1 aspect=%dar" />
<profile name="huffyuv lossless (video) + pcm_s16le (sound)" extension="avi" args="f=avi acodec=pcm_s16le ac=2 vcodec=huffyuv aspect=%dar" />
<profile name="MPEG-2 I-frame only (video) + mp2 (sound)" extension="mpg" args="f=mpeg acodec=mp2 ab=384k ar=48000 ac=2 vcodec=mpeg2video qscale=1 qmin=1 aspect=%dar intra=1" />
<profile name="MPEG-4 I-frame only (video) + mp3 (sound)" extension="mp4" args="f=mp4 acodec=libmp3lame ab=384k ar=48000 ac=2 vcodec=mpeg4 qscale=1 qmin=1 aspect=%dar intra=1" />
<profile name="H.264 I-frame only (video) + aac (sound)" extension="mp4" args="f=mp4 acodec=libfaac ab=384k ar=48000 ac=2 pix_fmt=yuv420p vcodec=libx264 cqp=1 coder=ac trellis=1 aspect=%dar intra=1" />
<profile name="H.264 lossless fast (video) + aac (sound)" extension="mp4" args="f=mp4 acodec=libfaac ab=384k ar=48000 ac=2 pix_fmt=yuv420p vcodec=libx264 cqp=0 me_method=esa subq=8 coder=ac partitions=+parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 refs=16 flags2=+dct8x8+mixed_refs trellis=1 aspect=%dar" />
<profile name="H.264 lossless slow (video) + aac (sound)" extension="mp4" args="f=mp4 acodec=libfaac ab=384k ar=48000 ac=2 pix_fmt=yuv420p vcodec=libx264 cqp=0 me_method=dia subq=1 partitions=-parti4x4-parti8x8-partp4x4-partp8x8-partb8x8 trellis=1 aspect=%dar" />
</group>
</profiles>

Binary file not shown.

Binary file not shown.

View File

@@ -9,11 +9,12 @@ URL: http://www.kdenlive.org/
Source0: kdenlive-%{version}.tar.bz2
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: mlt-dev, mlt++-dev, libavformat-dev, libsdl-dev, kdelibs4-dev, libqt4-dev
Requires: kdelibs4
BuildRequires: mlt, mlt++, soprano-devel
Requires: kdebase
%description
Kdenlive is a non-linear video editor for GNU/Linux, which supports DV, HDV and AVCHD(not complete yet) editing.
Kdenlive is a non-linear video editor for GNU/Linux, which supports
DV, HDV and AVCHD(not complete yet) editing.
%prep
%setup -q
@@ -38,119 +39,16 @@ rm -rf $RPM_BUILD_ROOT
%doc
%{_bindir}/kdenlive
/usr/bin/kdenlive
/usr/share/apps/kdenlive/kdenliveui.rc
/usr/share/apps/kdenlive/kdenlive.notifyrc
/usr/share/config.kcfg/kdenlivesettings.kcfg
/usr/share/applications/kde/kdenlive.desktop
/usr/share/icons/oxygen/scalable/mimetypes/application-x-kdenlive.svgz
/usr/share/icons/oxygen/scalable/mimetypes/video-mlt-playlist.svgz
/usr/share/icons/oxygen/64x64/apps/./kdenlive.png
/usr/share/icons/oxygen/48x48/apps/./kdenlive.png
/usr/share/icons/oxygen/32x32/apps/./kdenlive.png
/usr/share/icons/hicolor/64x64/apps/./kdenlive.png
/usr/share/icons/hicolor/48x48/apps/./kdenlive.png
/usr/share/icons/hicolor/32x32/apps/./kdenlive.png
/usr/share/mime/packages/kdenlive.xml
/usr/share/mime/packages/westley.xml
/usr/bin/kdenlive_render
/usr/lib/kde4/westleypreview.so
/usr/share/kde4/services/westleypreview.desktop
/usr/share/apps/kdenlive/effects/automask.xml
/usr/share/apps/kdenlive/effects/boxblur.xml
/usr/share/apps/kdenlive/effects/brightness.xml
/usr/share/apps/kdenlive/effects/charcoal.xml
/usr/share/apps/kdenlive/effects/chroma_hold.xml
/usr/share/apps/kdenlive/effects/chroma.xml
/usr/share/apps/kdenlive/effects/freeze.xml
/usr/share/apps/kdenlive/effects/gamma.xml
/usr/share/apps/kdenlive/effects/greyscale.xml
/usr/share/apps/kdenlive/effects/invert.xml
/usr/share/apps/kdenlive/effects/ladspa_declipper.xml
/usr/share/apps/kdenlive/effects/ladspa_equalizer.xml
/usr/share/apps/kdenlive/effects/ladspa_limiter.xml
/usr/share/apps/kdenlive/effects/ladspa_phaser.xml
/usr/share/apps/kdenlive/effects/ladspa_pitch_scale.xml
/usr/share/apps/kdenlive/effects/ladspa_pitch.xml
/usr/share/apps/kdenlive/effects/ladspa_rate_scale.xml
/usr/share/apps/kdenlive/effects/ladspa_reverb.xml
/usr/share/apps/kdenlive/effects/ladspa_room_reverb.xml
/usr/share/apps/kdenlive/effects/ladspa_vinyl.xml
/usr/share/apps/kdenlive/effects/mirror.xml
/usr/share/apps/kdenlive/effects/mute.xml
/usr/share/apps/kdenlive/effects/normalise.xml
/usr/share/apps/kdenlive/effects/obscure.xml
/usr/share/apps/kdenlive/effects/rotation.xml
/usr/share/apps/kdenlive/effects/sepia.xml
/usr/share/apps/kdenlive/effects/sox_echo.xml
/usr/share/apps/kdenlive/effects/sox_flanger.xml
/usr/share/apps/kdenlive/effects/sox_pitch.xml
/usr/share/apps/kdenlive/effects/sox_reverb.xml
/usr/share/apps/kdenlive/effects/sox_vibro.xml
/usr/share/apps/kdenlive/effects/threshold.xml
/usr/share/apps/kdenlive/effects/volume.xml
/usr/share/apps/kdenlive/effects/wave.xml
/usr/share/apps/kdenlive/effects/fadein.xml
/usr/share/apps/kdenlive/effects/fadeout.xml
/usr/share/apps/kdenlive/effects/frei0r_squareblur.xml
/usr/share/apps/kdenlive/effects/frei0r_distort0r.xml
/usr/share/apps/kdenlive/export/profiles.xml
/usr/share/apps/kdenlive/icons/hicolor/16x16/actions/./kdenlive-add-clip.png
/usr/share/apps/kdenlive/icons/hicolor/22x22/actions/./kdenlive-add-clip.png
/usr/share/apps/kdenlive/icons/hicolor/32x32/actions/./kdenlive-add-clip.png
/usr/share/apps/kdenlive/icons/hicolor/16x16/actions/./kdenlive-add-color-clip.png
/usr/share/apps/kdenlive/icons/hicolor/16x16/actions/./kdenlive-add-text-clip.png
/usr/share/apps/kdenlive/icons/hicolor/16x16/actions/./kdenlive-add-slide-clip.png
/usr/share/apps/kdenlive/icons/hicolor/16x16/actions/./kdenlive-show-video.png
/usr/share/apps/kdenlive/icons/hicolor/16x16/actions/./kdenlive-show-audio.png
/usr/share/apps/kdenlive/icons/hicolor/16x16/actions/./kdenlive-show-videothumb.png
/usr/share/apps/kdenlive/icons/hicolor/16x16/actions/./kdenlive-show-audiothumb.png
/usr/share/apps/kdenlive/icons/hicolor/16x16/actions/./kdenlive-show-markers.png
/usr/share/apps/kdenlive/icons/hicolor/16x16/actions/./kdenlive-snap.png
/usr/share/apps/kdenlive/icons/hicolor/16x16/actions/./kdenlive-insert-rect.png
/usr/share/apps/kdenlive/icons/hicolor/16x16/actions/./kdenlive-align-vert.png
/usr/share/apps/kdenlive/icons/hicolor/16x16/actions/./kdenlive-align-hor.png
/usr/share/apps/kdenlive/icons/hicolor/16x16/actions/./kdenlive-hide-video.png
/usr/share/apps/kdenlive/icons/hicolor/16x16/actions/./kdenlive-hide-audio.png
/usr/share/apps/kdenlive/icons/oxygen/16x16/actions/./kdenlive-snap.png
/usr/share/apps/kdenlive/icons/oxygen/16x16/actions/./kdenlive-show-videothumb.png
/usr/share/apps/kdenlive/icons/oxygen/16x16/actions/./kdenlive-show-video.png
/usr/share/apps/kdenlive/icons/oxygen/16x16/actions/./kdenlive-show-markers.png
/usr/share/apps/kdenlive/icons/oxygen/16x16/actions/./kdenlive-show-audiothumb.png
/usr/share/apps/kdenlive/icons/oxygen/16x16/actions/./kdenlive-show-audio.png
/usr/share/apps/kdenlive/icons/oxygen/16x16/actions/./kdenlive-insert-rect.png
/usr/share/apps/kdenlive/icons/oxygen/16x16/actions/./kdenlive-hide-video.png
/usr/share/apps/kdenlive/icons/oxygen/16x16/actions/./kdenlive-hide-audio.png
/usr/share/apps/kdenlive/icons/oxygen/16x16/actions/./kdenlive-align-vert.png
/usr/share/apps/kdenlive/icons/oxygen/16x16/actions/./kdenlive-align-hor.png
/usr/share/apps/kdenlive/icons/oxygen/16x16/actions/./kdenlive-add-text-clip.png
/usr/share/apps/kdenlive/icons/oxygen/16x16/actions/./kdenlive-add-slide-clip.png
/usr/share/apps/kdenlive/icons/oxygen/16x16/actions/./kdenlive-add-color-clip.png
/usr/share/apps/kdenlive/icons/oxygen/16x16/actions/./kdenlive-add-clip.png
/usr/share/apps/kdenlive/icons/hicolor/scalable/actions/./kdenlive-select-tool.svgz
/usr/share/apps/kdenlive/icons/hicolor/scalable/actions/./kdenlive-add-clip.svgz
/usr/share/apps/kdenlive/icons/hicolor/scalable/actions/./kdenlive-zone-end.svgz
/usr/share/apps/kdenlive/icons/hicolor/scalable/actions/./kdenlive-zone-start.svgz
/usr/share/apps/kdenlive/icons/oxygen/scalable/actions/./kdenlive-zone-start.svgz
/usr/share/apps/kdenlive/icons/oxygen/scalable/actions/./kdenlive-zone-end.svgz
/usr/share/apps/kdenlive/icons/oxygen/scalable/actions/./kdenlive-select-tool.svgz
/usr/share/apps/kdenlive/banner.png
/usr/share/apps/kdenlive/timeline_nothumbs.png
/usr/share/apps/kdenlive/timeline_athumbs.png
/usr/share/apps/kdenlive/timeline_vthumbs.png
/usr/share/apps/kdenlive/timeline_avthumbs.png
/usr/share/apps/kdenlive/transition.png
/usr/share/apps/kdenlive/metadata.properties
/usr/share/apps/kdenlive/blacklisted_effects.txt
/usr/share/apps/kdenlive/blacklisted_transitions.txt
/usr/share/locale/it/LC_MESSAGES/kdenlive.mo
/usr/share/locale/ca/LC_MESSAGES/kdenlive.mo
/usr/share/locale/cs/LC_MESSAGES/kdenlive.mo
/usr/share/locale/da/LC_MESSAGES/kdenlive.mo
/usr/share/locale/de/LC_MESSAGES/kdenlive.mo
/usr/share/locale/es/LC_MESSAGES/kdenlive.mo
/usr/share/locale/fr/LC_MESSAGES/kdenlive.mo
/usr/share/locale/nl/LC_MESSAGES/kdenlive.mo
/usr/share/locale/zh/LC_MESSAGES/kdenlive.mo
/usr/bin/kdenlive_render
/usr/lib/kde4/westleypreview.so
/usr/share/applications/kde/kdenlive.desktop
/usr/share/config.kcfg/kdenlivesettings.kcfg
/usr/share/icons/oxygen/scalable/mimetypes/application-x-kdenlive.svgz
/usr/share/icons/oxygen/scalable/mimetypes/video-mlt-playlist.svgz
/usr/share/kde4/apps/kdenlive/*
/usr/share/kde4/services/westleypreview.desktop
/usr/share/locale/*/LC_MESSAGES/kdenlive.mo
/usr/share/mime/packages/kdenlive.xml
/usr/share/mime/packages/westley.xml
%changelog

22
lumas/CMakeLists.txt Normal file
View File

@@ -0,0 +1,22 @@
INSTALL(FILES
bi-linear_x.pgm
bi-linear_y.pgm
burst.pgm
checkerboard_small.pgm
clock.pgm
cloud.pgm
curtain.pgm
horizontal_blinds.pgm
linear_x.pgm
linear_y.pgm
radial-bars.pgm
radial.pgm
spiral.pgm
spiral2.pgm
square.pgm
square2-bars.pgm
square2.pgm
symmetric_clock.pgm
DESTINATION ${DATA_INSTALL_DIR}/kdenlive/lumas)

BIN
lumas/bi-linear_x.pgm Normal file

Binary file not shown.

1445
lumas/bi-linear_y.pgm Normal file

File diff suppressed because one or more lines are too long

5
lumas/burst.pgm Executable file

File diff suppressed because one or more lines are too long

5005
lumas/checkerboard_small.pgm Executable file

File diff suppressed because one or more lines are too long

BIN
lumas/clock.pgm Normal file

Binary file not shown.

1379
lumas/cloud.pgm Normal file

File diff suppressed because one or more lines are too long

1213
lumas/curtain.pgm Normal file

File diff suppressed because one or more lines are too long

BIN
lumas/horizontal_blinds.pgm Executable file

Binary file not shown.

BIN
lumas/linear_x.pgm Normal file

Binary file not shown.

BIN
lumas/linear_y.pgm Normal file

Binary file not shown.

BIN
lumas/radial-bars.pgm Normal file

Binary file not shown.

209
lumas/radial.pgm Normal file

File diff suppressed because one or more lines are too long

5
lumas/spiral.pgm Normal file

File diff suppressed because one or more lines are too long

5
lumas/spiral2.pgm Normal file

File diff suppressed because one or more lines are too long

125
lumas/square.pgm Normal file

File diff suppressed because one or more lines are too long

BIN
lumas/square2-bars.pgm Normal file

Binary file not shown.

389
lumas/square2.pgm Normal file

File diff suppressed because one or more lines are too long

BIN
lumas/symmetric_clock.pgm Executable file

Binary file not shown.

1
man/CMakeLists.txt Normal file
View File

@@ -0,0 +1 @@
install(FILES kdenlive.1 kdenlive_render.1 DESTINATION ${MAN_INSTALL_DIR}/man1 )

149
man/kdenlive.1 Normal file
View File

@@ -0,0 +1,149 @@
.\" This file was generated by kdemangen.pl
.TH KDENLIVE 1 "Nov 2008" "K Desktop Environment" "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.
.SH OPTIONS
.SS
.SS Arguments:
.TP
.B file
Document to open
.SS Options:
.TP
.B \-\-mlt\-path <path>
Set the path for MLT environnement
.SS
.SS Generic options:
.TP
.B \-\-help
Show help about options
.TP
.B \-\-help\-qt
Show Qt specific options
.TP
.B \-\-help\-kde
Show KDE specific options
.TP
.B \-\-help\-all
Show all options
.TP
.B \-\-author
Show author information
.TP
.B \-v, \-\-version
Show version information
.TP
.B \-\-license
Show license information
.TP
.B \-\-
End of options
.SS
.SS KDE options:
.TP
.B \-\-caption <caption>
Use 'caption' as name in the titlebar
.TP
.B \-\-icon <icon>
Use 'icon' as the application icon
.TP
.B \-\-config <filename>
Use alternative configuration file
.TP
.B \-\-nocrashhandler
Disable crash handler, to get core dumps
.TP
.B \-\-waitforwm
Waits for a WM_NET compatible windowmanager
.TP
.B \-\-style <style>
sets the application GUI style
.TP
.B \-\-geometry <geometry>
sets the client geometry of the main widget \- see man X for the argument format
.SS
.SS Qt options:
.TP
.B \-\-display <displayname>
Use the X\-server display 'displayname'
.TP
.B \-\-session <sessionId>
Restore the application for the given 'sessionId'
.TP
.B \-\-cmap
Causes the application to install a private color
map on an 8\-bit display
.TP
.B \-\-ncols <count>
Limits the number of colors allocated in the color
cube on an 8\-bit display, if the application is
using the QApplication::ManyColor color
specification
.TP
.B \-\-nograb
tells Qt to never grab the mouse or the keyboard
.TP
.B \-\-dograb
running under a debugger can cause an implicit
\-nograb, use \-dograb to override
.TP
.B \-\-sync
switches to synchronous mode for debugging
.TP
.B \-\-fn, \-\-font <fontname>
defines the application font
.TP
.B \-\-bg, \-\-background <color>
sets the default background color and an
application palette (light and dark shades are
calculated)
.TP
.B \-\-fg, \-\-foreground <color>
sets the default foreground color
.TP
.B \-\-btn, \-\-button <color>
sets the default button color
.TP
.B \-\-name <name>
sets the application name
.TP
.B \-\-title <title>
sets the application title (caption)
.TP
.B \-\-visual TrueColor
forces the application to use a TrueColor visual on
an 8\-bit display
.TP
.B \-\-inputstyle <inputstyle>
sets XIM (X Input Method) input style. Possible
values are onthespot, overthespot, offthespot and
root
.TP
.B \-\-im <XIM server>
set XIM server
.TP
.B \-\-noxim
disable XIM
.TP
.B \-\-reverse
mirrors the whole layout of widgets
.TP
.B \-\-stylesheet
<file.qss> applies the Qt stylesheet to the application widgets
.SS
.SH SEE ALSO
Please see the homepage at
.BR http://www.kdenlive.org/
.br
.SH AUTHORS
.nf
Jean\-Baptiste Mardelle <jb@kdenlive.org>
.br
Marco Gittler <g.marco@freenet.de>
.br

55
man/kdenlive_render.1 Normal file
View File

@@ -0,0 +1,55 @@
.\" This file was generated by kdemangen.pl
.TH KDENLIVE_RENDER 1 "Dec 2008" "K Desktop Environment" "Render program for Kdenlive."
.SH NAME
kdenlive_render
\- Render program for Kdenlive.
.SH SYNOPSIS
kdenlive_render [\-erase] [in=pos] [out=pos] [render] [profile] [rendermodule] [player] [src] [dest] [[arg1] [arg2] ...]
.SH DESCRIPTION
Render program for Kdenlive. Renders kdenlive project detached from Kdenlive, while providing feedback through kuiserver. This program is not meant to be called directly by users, but is called from Kdenlive, when a rendering process is started.
.SH OPTIONS
.SS
.SS Options:
.TP
.B \-erase
If present, src file will be erased after rendering
.TP
.B in=pos
Start rendering at frame pos
.TP
.B out=pos
End rendering at frame pos
.TP
.B render
Path to MLT inigo render program
.TP
.B profile
The MLT video profile
.TP
.B rendermodule
The MLT consumer used for rendering, usually it is avformat
.TP
.B player
Path to video player to play when rendering is over, use '\-' to disable playing
.TP
.B src
Source file \- usually MLT Westley playlist
.TP
.B dest
Destination file
.TP
.B args
Space separated libavformat arguments
.SS
.SH SEE ALSO
Please see the homepage at
.BR http://www.kdenlive.org/
.br
.SH AUTHORS
.nf
Jean\-Baptiste Mardelle <jb@kdenlive.org>
.br
Marco Gittler <g.marco@freenet.de>
.br

7
plugins/CMakeLists.txt Normal file
View File

@@ -0,0 +1,7 @@
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src
${KDE4_INCLUDES}
${QT4_INCLUDES}
)
ADD_SUBDIRECTORY(sampleplugin)

View File

@@ -0,0 +1,27 @@
include_directories (
${CMAKE_SOURCE_DIR}
${CMAKE_BINARY_DIR}
${CMAKE_CURRENT_BINARY_DIR}
${KDE4_INCLUDES}
)
add_definitions( ${KDE4_DEFINITIONS} )
#add_definitions (${QT_DEFINITIONS})
ADD_DEFINITIONS(-DQT_PLUGIN)
#ADD_DEFINITIONS(-DQT_NO_DEBUG)
ADD_DEFINITIONS(-DQT_SHARED)
kde4_add_ui_files(plugin_UI countdown_ui.ui)
SET(sampleplugindir_SRCS
sampleplugin.cpp)
KDE4_ADD_PLUGIN(kdenlive_sampleplugin WITH_PREFIX ${sampleplugindir_SRCS} ${plugin_UI})
#ADD_LIBRARY(kdenlive_sampleplugin SHARED ${sampleplugindir_SRCS})
TARGET_LINK_LIBRARIES(kdenlive_sampleplugin ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${KDE4_KDEUI_LIBS} ${KDE4_KDECORE_LIBS} ${KDE4_KIO_LIBS})
INSTALL(TARGETS kdenlive_sampleplugin DESTINATION ${PLUGIN_INSTALL_DIR})

View File

@@ -0,0 +1,115 @@
<ui version="4.0" >
<class>CountDown_UI</class>
<widget class="QDialog" name="CountDown_UI" >
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>288</width>
<height>98</height>
</rect>
</property>
<property name="windowTitle" >
<string>Dialog</string>
</property>
<layout class="QGridLayout" name="gridLayout" >
<item row="0" column="0" >
<widget class="QLabel" name="label" >
<property name="text" >
<string>Save to</string>
</property>
</widget>
</item>
<item row="0" column="2" >
<widget class="KUrlRequester" name="path" />
</item>
<item row="1" column="0" >
<widget class="QLabel" name="label_2" >
<property name="text" >
<string>Duration (seconds)</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="3" >
<widget class="QDialogButtonBox" name="buttonBox" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons" >
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
<item row="2" column="0" >
<spacer name="verticalSpacer" >
<property name="orientation" >
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="2" >
<widget class="KIntSpinBox" name="duration" >
<property name="maximum" >
<number>10000</number>
</property>
<property name="value" >
<number>10</number>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>KIntSpinBox</class>
<extends>QSpinBox</extends>
<header>knuminput.h</header>
</customwidget>
<customwidget>
<class>KUrlRequester</class>
<extends>QFrame</extends>
<header>kurlrequester.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>CountDown_UI</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel" >
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel" >
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>CountDown_UI</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel" >
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel" >
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@@ -0,0 +1,94 @@
/***************************************************************************
* Copyright (C) 2009 by Jean-Baptiste Mardelle (jb@kdenlive.org) *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
#include <QtGui>
#include <QDialog>
#include <QDomDocument>
#include <QInputDialog>
#include <KUrlRequester>
#include <KIntSpinBox>
#include <KDebug>
#include <KMessageBox>
#include "sampleplugin.h"
#include "ui_countdown_ui.h"
QStringList SamplePlugin::generators() const {
return QStringList() << i18n("Countdown") << i18n("Noise");
}
KUrl SamplePlugin::generatedClip(const QString &generator, const KUrl &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() + "/noise";
} else prePath = projectFolder.path() + "/counter";
int ct = 0;
QString counter = QString::number(ct).rightJustified(5, '0', false);
while (QFile::exists(prePath + counter + ".westley")) {
ct++;
counter = QString::number(ct).rightJustified(5, '0', false);
}
QDialog d;
if (generator == i18n("Noise")) d.setWindowTitle(tr("Create Noise Clip"));
else d.setWindowTitle(tr("Create Countdown Clip"));
Ui::CountDown_UI view;
view.setupUi(&d);
QString clipFile = prePath + counter + ".westley";
view.path->setPath(clipFile);
if (d.exec() == QDialog::Accepted) {
QDomDocument doc;
QDomElement westley = doc.createElement("westley");
QDomElement playlist = doc.createElement("playlist");
if (generator == i18n("Noise")) {
QDomElement prod = doc.createElement("producer");
prod.setAttribute("mlt_service", "noise");
prod.setAttribute("in", "0");
prod.setAttribute("out", QString::number((int) fps * view.duration->value()));
playlist.appendChild(prod);
} else {
for (int i = 0; i < view.duration->value(); i++) {
// Create the producers
QDomElement prod = doc.createElement("producer");
prod.setAttribute("mlt_service", "pango");
prod.setAttribute("in", "0");
prod.setAttribute("out", QString::number((int) fps));
prod.setAttribute("markup", QString::number(view.duration->value() - i));
playlist.appendChild(prod);
}
}
westley.appendChild(playlist);
doc.appendChild(westley);
QFile file(view.path->url().path());
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
kWarning() << "////// ERROR writing to file: " << view.path->url().path();
KMessageBox::error(0, i18n("Cannot write to file %1", view.path->url().path()));
return KUrl();
}
QTextStream out(&file);
out << doc.toString();
file.close();
return view.path->url();
}
return KUrl();
}
Q_EXPORT_PLUGIN2(kdenlive_sampleplugin, SamplePlugin)

View File

@@ -0,0 +1,41 @@
/***************************************************************************
* Copyright (C) 2009 by Jean-Baptiste Mardelle (jb@kdenlive.org) *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
#ifndef SAMPLEPLUGIN_H
#define SAMPLEPLUGIN_H
#include <QObject>
#include <QStringList>
#include <KUrl>
#include "interfaces.h"
class SamplePlugin : public QObject, public ClipGenerator {
Q_OBJECT
Q_INTERFACES(ClipGenerator)
public:
QStringList generators() const;
KUrl generatedClip(const QString &generator, const KUrl &projectFolder, const QStringList &lumaNames, const QStringList &lumaFiles, const double fps, const int width, const int height);
};
#endif

View File

@@ -1 +1 @@
SUBDIRS(it ca cs da de es fr nl zh)
SUBDIRS(ca cs da de es fr he hu it nl pt_BR ru sl zh)

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kdenlive\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-11-11 21:47+0100\n"
"POT-Creation-Date: 2008-12-25 11:24+0100\n"
"PO-Revision-Date: 2008-11-12 00:13+0100\n"
"Last-Translator: Mads Bondo Dydensborg <mads@dydensborg.dk>\n"
"Language-Team: Dansk <da@li.org>\n"
@@ -38,18 +38,33 @@ msgstr "0"
msgid "100%"
msgstr "100%"
msgid "11250"
msgstr "11250"
msgid "200%"
msgstr "200%"
msgid "22500"
msgstr "22500"
msgid "25/1"
msgstr "25/1"
msgid "32000"
msgstr "32000"
msgid "320x240"
msgstr "320x240"
msgid "4/3"
msgstr "4/3"
msgid "41000"
msgstr "41000"
msgid "48000"
msgstr "48000"
msgid "50%"
msgstr "50%"
@@ -65,9 +80,31 @@ msgstr "99:99:99:99; "
msgid ":::"
msgstr ":::"
#, kde-format
msgid ""
"<b>Frame size:</b>%1x%2<br><b>Frame rate:</b>%3/%4<br><b>Aspect ratio:</b>%5/"
"%6<br><b>Display ratio:</b>%7/%8"
msgstr ""
"<b>Framestørrelse:</b>%1x%2<br><b>Framerate:</b>%3/%4<br><b>Aspektratio:</b>%5/"
"%6<br><b>Vis ratio:</b>%7/%8"
msgid "<b>Recordmydesktop utility not found, please install it for screen grabs</b>"
msgstr "<b>Recordmydesktop programmet blev ikke fundet. Installér det venligst for skærmindfangning</b>"
msgid "<b>dvgrab utility not found, please install it for firewire capture</b>"
msgstr "<b>dvgrab programmet blev ikke fundet. Installér det venligst for firewire indfangning</b>"
msgid "<br><b>Author:</b> "
msgstr "<br><b>Forfatter:</b> "
#, kde-format
msgid "<qt>Clip <b>%1</b><br>is invalid or missing, what do you want to do?"
msgstr "<qt>Klip <b>%1</b><br>er ugyldigt eller manger, hvad ønsker du at gøre?"
#, kde-format
msgid "<qt>Clip <b>%1</b><br>is invalid, what do you want to do?"
msgstr "<qt>Klip <b>%1</b><br>er ugyldigt, hvad ønsker du at gøre?"
#, kde-format
msgid "<qt>Clip <b>%1</b><br>is invalid, will be removed from project."
msgstr "<qt>Klip <b>%1</b><br>er ugyldigt, vil blive fjernet fra projekt."
@@ -75,8 +112,9 @@ msgstr "<qt>Klip <b>%1</b><br>er ugyldigt, vil blive fjernet fra projekt."
msgid "A"
msgstr "A"
msgid "A guide already exists at that position"
msgstr "En hjælpelinie eksisterer allerede på den position"
#, kde-format
msgid "A guide already exists at position %1"
msgstr "En hjælpelinie eksisterer allerede på position %1"
msgid ""
"A profile with same name already exists in MLT's default profiles, please "
@@ -164,9 +202,15 @@ msgstr "Tilføj ny effekt"
msgid "Add recording time to captured file name"
msgstr "Tilføj optagelsestid til indspillet filnavn"
msgid "Add space"
msgstr "Tilføj tomrum"
msgid "Add timeline clip"
msgstr "Tilføj tidslinie klip"
msgid "Add track"
msgstr "Tilføj spor"
msgid "Add transition"
msgstr "Tilføj overgang"
@@ -197,6 +241,9 @@ msgstr "Juster..."
msgid "All"
msgstr "Alle"
msgid "All tracks"
msgstr "Alle spor"
msgid "Allow horizontal moves"
msgstr "Tillad horisontal flytning"
@@ -218,12 +265,18 @@ msgstr "Aspektratio:"
msgid "Audio"
msgstr "Lyd"
msgid "Audio channels"
msgstr "Lyd kanaler"
msgid "Audio clip"
msgstr "Lyd klip"
msgid "Audio codec"
msgstr "Lyd kodning"
msgid "Audio device"
msgstr "Lydenhed"
msgid "Audio device:"
msgstr "Lydenhed:"
@@ -237,12 +290,21 @@ msgstr "Lydredigering"
msgid "Audio fade duration: %1s"
msgstr "Lyd udfasningslængde: %1s"
msgid "Audio frequency"
msgstr "Lyd frekvens"
msgid "Audio index"
msgstr "Lydindeks"
msgid "Audio track"
msgstr "Lydspor"
msgid "Audio tracks"
msgstr "Lydspor"
msgid "Auto"
msgstr "Automatisk"
msgid "Auto Mask"
msgstr "Automaske"
@@ -255,6 +317,9 @@ msgstr "Autogemte filer findes. Vil du gendanne dem nu?"
msgid "Automatic"
msgstr "Automatisk"
msgid "Automatic Transition"
msgstr "Automatisk overgang"
msgid "Automatically start a new file on scene cut"
msgstr "Automatisk starte en ny fil ved scene skift"
@@ -267,6 +332,9 @@ msgstr "Baggrund"
msgid "BasicOperations"
msgstr "Basale operationer"
msgid "Black"
msgstr "Sort"
msgid "Blue Screen"
msgstr "Blå skærm"
@@ -288,6 +356,9 @@ msgstr "Box sløring"
msgid "Brightness"
msgstr "Lysstyrke"
msgid "Buffer"
msgstr "Buffer"
msgid "Button 1"
msgstr "Knap 1"
@@ -314,24 +385,21 @@ msgstr ""
"Kan ikke tilgå skrivebordssøgningsinformation for %1.\n"
"Deaktiverer skrivebordssøgningsintegration."
msgid "Cannot add marker if more than one clip is selected"
msgstr "Kan ikke tilføje markør, hvis mere end et klip er valgt"
msgid "Cannot cut a transition"
msgstr "Kan ikke klippe i en overgang"
msgid "Cannot delete marker if more than one clip is selected"
msgstr "Kan ikke slette en markør, hvis mere end et klip er valgt"
msgid "Cannot edit marker if more than one clip is selected"
msgstr "Kan ikke redigere markør, hvis mere end et klip er valgt"
msgid "Cannot find clip to add effect"
msgstr "Kan ikke finde klip for at tilføje effekt"
msgid "Cannot find clip to add marker"
msgstr "Kan ikke finde klip for at tilføje markør"
msgid "Cannot find clip to cut"
msgstr "Kan ikke finde klip at klippe"
msgid "Cannot find clip to remove marker"
msgstr "Kan ikke finde klip for at fjerne markør"
msgid "Cannot find clip to uncut"
msgstr "Kan ikke finde klip at splejse"
@@ -345,16 +413,24 @@ msgid "Cannot find your Mlt profiles, please give the path"
msgstr "Kan ikke finde MLT profiler, angiv venligst en sti"
#, kde-format
msgid "Cannot move clip at time: %1s on track %2"
msgstr "Kan ikke flytte klip fra tid: %1s på spor %2"
#, c-format, kde-format
msgid "Cannot move clip to position %1seconds"
msgstr "Kan ikke flytte klip til position %1sekunder"
msgid "Cannot move clip at position %1, track %2"
msgstr "Kan ikke flytte klip fra position: %1, spor %2"
#, kde-format
msgid "Cannot move transition at time: %1s on track %2"
msgstr "Kan ikke flytte overgang fra tid: %1s på spor %2"
msgid "Cannot move clip at time: %1 on track %2"
msgstr "Kan ikke flytte klip fra tid: %1 på spor %2"
#, kde-format
msgid "Cannot move clip to position %1"
msgstr "Kan ikke flytte klip til position %1"
#, kde-format
msgid "Cannot move transition at position %1, track %2"
msgstr "Kan ikke flytte overgang fra position: %1, spor %2"
#, kde-format
msgid "Cannot move transition at time: %1 on track %2"
msgstr "Kan ikke flytte overgang fra tid: %1 på spor %2"
msgid "Cannot paste clip to selected place"
msgstr "Kan ikke indsætte klip det valgte sted"
@@ -406,9 +482,6 @@ msgstr "Indspilningsparametre"
msgid "Captured files"
msgstr "Indspillede filer"
msgid "Capturing..."
msgstr "Indspiller..."
msgid "Center"
msgstr "Center"
@@ -418,12 +491,24 @@ msgstr "Ændre"
msgid "Change Clip Speed"
msgstr "Skift klip hastighed"
msgid "Change Track"
msgstr "Ændre spor"
msgid "Change Track Type"
msgstr "Ændre sportype"
msgid "Change gamma color value"
msgstr "Skift gamma farve værdi"
msgid "Change image brightness with keyframes"
msgstr "Skidt billede lysstyrke med keyframes"
msgid "Change track"
msgstr "Ændre spor"
msgid "Change track type"
msgstr "Ændre sportype"
msgid ""
"Changing the size of video when rendering\n"
"is not fully supported, you may have problems\n"
@@ -449,6 +534,9 @@ msgstr "Kultegning effekt"
msgid "CheckBox"
msgstr "Afkrydsningsfelt"
msgid "Checking system"
msgstr "Tjekker system"
msgid "Chroma Hold"
msgstr "Chroma hold"
@@ -462,6 +550,9 @@ msgstr "Chrominance V"
msgid "Clean"
msgstr "Tom"
msgid "Clip"
msgstr "Klip"
msgid "Clip Color"
msgstr "Klipfarve"
@@ -600,6 +691,9 @@ msgstr "Standard programmer"
msgid "Default capture device"
msgstr "Standard indspilningsenhed"
msgid "Default folder for project files"
msgstr "Standard mappe til projekt filer"
msgid "Default folders"
msgstr "Standard mapper"
@@ -634,6 +728,9 @@ msgstr "Slet markør"
msgid "Delete Selected Item"
msgstr "Slet valgt element"
msgid "Delete Track"
msgstr "Slet spor"
msgid "Delete clip"
msgstr "Slep klip"
@@ -670,6 +767,9 @@ msgstr "Slet valgt element"
msgid "Delete timeline clip"
msgstr "Slet tidslinie klip"
msgid "Delete track"
msgstr "Slet spor"
msgid "Delete transition from clip"
msgstr "Slet overgang fra klip"
@@ -730,9 +830,15 @@ msgstr "Dokument at åbne"
msgid "Don't recover"
msgstr "Gendan ikke"
msgid "Download New Lumas..."
msgstr "Hent nye lumaer..."
msgid "Duration"
msgstr "Længde"
msgid "Dvgrab"
msgstr "Dvgrab"
msgid "Dw"
msgstr "Dw"
@@ -793,11 +899,11 @@ msgstr "Effektstak"
msgid "Enable Jog Shuttle device"
msgstr "Aktiver Jog Shuttle enhed"
msgid "Encoding"
msgstr "Indkodning"
msgid "Encoding captured video..."
msgstr "Indkoder indfanget video..."
msgid "Encoding parameters"
msgstr "Indkodningsparametre"
msgid "Encoding params"
msgstr "Indkodningsarametre"
msgid "End"
msgstr "Slut"
@@ -814,6 +920,10 @@ msgstr "Omgivelser"
msgid "Equalizer"
msgstr "Equalizer"
#, kde-format
msgid "Error removing clip at %1 on track %2"
msgstr "Fejl ved sletning af clip fra %1 på spor %2"
msgid "Error starting MLT's command line player (inigo)"
msgstr "Fejl ved start af MLT's kommandolinieafspiller (inigo)"
@@ -835,6 +945,9 @@ msgstr "Ekstra værktøjslinie"
msgid "Extract frame"
msgstr "Udtræk frame"
msgid "FFmpeg & ffplay"
msgstr "FFmpeg & ffplay"
msgid "Fade in"
msgstr "Indfasning"
@@ -867,12 +980,12 @@ msgstr ""
msgid "File already exists. Do you want to overwrite it ?"
msgstr "Filen eksisterer allerede. Vil du overskrive den?"
msgid "File extension"
msgstr "Filendelse"
msgid "File name"
msgstr "Filnavn"
msgid "File not found"
msgstr "Fil ikke fundet"
msgid "File size"
msgstr "Filstørrelse"
@@ -894,9 +1007,6 @@ msgstr "Find stoppet"
msgid "Firewire"
msgstr "Firewire"
msgid "Firewire / dvgrab"
msgstr "Firewire / dvgrab"
msgid ""
"Firewire is not enabled on your system.\n"
" Please install Libiec61883 and recompile Kdenlive"
@@ -913,6 +1023,9 @@ msgstr "Flip billede i vilkårlig retning"
msgid "Folder"
msgstr "Mappe"
msgid "Follow mouse"
msgstr "Følg musen"
msgid "Force pixel aspect ratio"
msgstr "Tving pixel aspekratio"
@@ -925,6 +1038,9 @@ msgstr "Fremad"
msgid "Forward 1 Frame"
msgstr "Fremad 1 frame"
msgid "Forward 1 Second"
msgstr "Fremad 1 sekund"
msgid "Forward 1 frame"
msgstr "Fremad 1 frame"
@@ -980,6 +1096,9 @@ msgstr "Fuldt projekt"
msgid "Full screen capture"
msgstr "Fuldskærmsindfangning"
msgid "Full shots"
msgstr "Fuldt skud"
msgid "Gain"
msgstr "Gain"
@@ -1061,6 +1180,9 @@ msgstr "Skjul et område af klippet"
msgid "Hide a selected zone and follow its movements"
msgstr "Skjul en valgt zone og følg dens bevægelser"
msgid "Hide frame"
msgstr "Skjul ramme"
msgid "Hor. Center"
msgstr "Hor. centrér"
@@ -1100,6 +1222,12 @@ msgstr "Billedestørrelse"
msgid "Image type"
msgstr "Billedetype"
msgid "In Point"
msgstr "Indpunkt"
msgid "Inigo"
msgstr "Inigo"
msgid "Inigo path"
msgstr "Inigo sti"
@@ -1109,6 +1237,18 @@ msgstr "Initialiserer..."
msgid "Input gain (db)"
msgstr "Input gain (db)"
msgid "Insert Space"
msgstr "Indsæt tomrum"
msgid "Insert Track"
msgstr "Indsæt spor"
msgid "Insert space"
msgstr "Indsæt tomrum"
msgid "Insert track"
msgstr "Indsæt spor"
msgid "Install extra video mimetypes"
msgstr "Installer ekstra video mimetyper"
@@ -1118,12 +1258,18 @@ msgstr "Intensitet"
msgid "Interlaced"
msgstr "Interlaced"
msgid "Invalid action"
msgstr "Ugyldig handling"
msgid "Invert"
msgstr "Invertér"
msgid "Invert colors"
msgstr "Invertér farver"
msgid "Jack"
msgstr "Jack"
msgid "Jean-Baptiste Mardelle"
msgstr "Jean-Baptiste Mardelle"
@@ -1136,12 +1282,12 @@ msgstr "JogShuttle"
msgid "Kdenlive"
msgstr "Kdenlive"
msgid "Keep as placeholder"
msgstr "Behold som pladsholder"
msgid "Kernel size"
msgstr "Kernestørrelse"
msgid "Keyframe"
msgstr "Keyframe"
msgid "LADSPA change pitch audio effect"
msgstr "LADSPA ændre pitch lydeffekt"
@@ -1193,11 +1339,15 @@ msgstr "Indlæser spilleliste..."
msgid "Loading project clips"
msgstr "Indlæser projekt klip"
#, kde-format
msgid "Looking for %1"
msgstr "Kigger efter %1"
msgid "Loop"
msgstr "Loop"
msgid "Loop Section"
msgstr "Loop sektion"
msgid "Loop Zone"
msgstr "Loop zone"
msgid "Luma File"
msgstr "Luma fil"
@@ -1294,6 +1444,9 @@ msgstr "Flyt effekt ned"
msgid "Move effect up"
msgstr "Flyt effekt op"
msgid "Move group"
msgstr "Flyt gruppe"
msgid "Move guide"
msgstr "Flyt hjælpelinie"
@@ -1330,15 +1483,9 @@ msgstr "Nano X"
msgid "New speed (percents)"
msgstr "Ny hastighed (procent)"
msgid "No clip at cursor time"
msgstr "Intet klip ved pegertid"
msgid "No clip copied"
msgstr "Intet klip kopieret"
msgid "No clip selected"
msgstr "Intet klip valgt"
msgid "No guide at cursor time"
msgstr "Ingen hjælpelinie ved pegertid"
@@ -1348,9 +1495,6 @@ msgstr "Intet billede fundet"
msgid "No marker found at cursor time"
msgstr "Ingen markør fundet ved pegertid"
msgid "No selected clip at cursor time"
msgstr "Intet valgt klip ved pegertid"
msgid "Normalise"
msgstr "Normaliser"
@@ -1376,6 +1520,9 @@ msgstr "OSS med DMA adgang"
msgid "Obscure"
msgstr "Obskur"
msgid "Offset"
msgstr "Offset"
msgid "Opacity"
msgstr "Uigennemsigtighed"
@@ -1388,6 +1535,9 @@ msgstr "Åben sidste projekt ved start"
msgid "Open projects in new tabs"
msgstr "Åben projekter i nye faneblade"
msgid "Out Point"
msgstr "Udpunkt"
msgid "Output file"
msgstr "Uddatafil"
@@ -1436,8 +1586,8 @@ msgstr "Afspil"
msgid "Play / Pause"
msgstr "Spil / Pause"
msgid "Play Section"
msgstr "Afspil sektion"
msgid "Play Zone"
msgstr "Afspil zone"
msgid "Play after render"
msgstr "Afspil efter generéring"
@@ -1448,9 +1598,6 @@ msgstr "Afspil..."
msgid "Playback"
msgstr "Afspilning"
msgid "Playback params"
msgstr "Afspilningsparametre"
msgid "Playlist clip"
msgstr "Spilleliste klip"
@@ -1464,8 +1611,8 @@ msgstr ""
msgid "Please report bugs to http://kdenlive.org/mantis"
msgstr "Rapportér venligst fejl til http://kdenlive.org/mantis"
msgid "Please set your default video format"
msgstr "Vær venlig at indstille standard video format"
msgid "Please set your default video profile"
msgstr "Vær venlig at indstille standard video profil"
#, kde-format
msgid ""
@@ -1481,6 +1628,9 @@ msgstr ""
"Filer bliver gemt in:\n"
"%1"
msgid "Ports:"
msgstr "Porte:"
msgid "Pos"
msgstr "Pos"
@@ -1583,15 +1733,44 @@ msgstr "Optag"
msgid "Record Monitor"
msgstr "Optagmonitor"
msgid "Recordmydesktop"
msgstr "Recordmydesktop"
#, kde-format
msgid "Recordmydesktop found at: %1"
msgstr "Recordmydesktop fundet: %1"
msgid ""
"Recordmydesktop utility not found,\n"
" please install it for screen grabs"
msgstr ""
"Recordmydesktop program ikke fundet,\n"
" venligst installér det for skærmindfangning"
msgid "Recover"
msgstr "Gendan"
msgid "Region"
msgstr "Region"
msgid "Region capture"
msgstr "Delområdeindfangning"
msgid "Release time (s)"
msgstr "Udgivelsestidspunkt (s)"
msgid "Remaining time"
msgstr "Tilbageværende tid"
msgid "Remove Space"
msgstr "Fjern tomrum"
msgid "Remove Track"
msgstr "Fjern spor"
msgid "Remove space"
msgstr "Fjern spor"
msgid "Rename folder"
msgstr "Omdøb mappe"
@@ -1601,17 +1780,43 @@ msgstr "Generér"
msgid "Rendering"
msgstr "Generéring"
#, kde-format
msgid "Rendering %1"
msgstr "Generérer %1"
#, kde-format
msgid "Rendering <i>%1</i> started"
msgstr "Generéring <i>%1</i> begyndt"
msgid "Rendering Crashed"
msgstr "Generéring brudt sammen"
#, kde-format
msgid "Rendering of %1 aborted, resulting video will probably be corrupted."
msgstr "Generering af %1 afbrudt, resultatvideoen er formentlig defekt."
#, kde-format
msgid "Rendering of %1 is over"
msgstr "Generéring af %1 er færdig"
msgid "Rendering of %1 crashed"
msgstr "Generéring af %1 brød sammen"
#, kde-format
msgid "Rendering of %1 finished in %2"
msgstr "Generéring af %1 afsluttede i %2"
msgid "Rendering to"
msgstr "Generérer til"
msgid "Required for firewire capture"
msgstr "Krævet for firewire indfangning"
msgid "Required for rendering (part of MLT package)"
msgstr "Krævet for at generére (del af MLT)"
msgid "Required for screen capture"
msgstr "Krævet for skærmindfangning"
msgid "Required for webcam capture"
msgstr "Krævet for indfangning fra webcams"
msgid "Reset effect"
msgstr "Nulstil effekt"
@@ -1646,6 +1851,9 @@ msgstr "Tilbage"
msgid "Rewind 1 Frame"
msgstr "Tilbage 1 frame"
msgid "Rewind 1 Second"
msgstr "Tilbage 1 sekund"
msgid "Rewind 1 frame"
msgstr "Tilbage 1 frame"
@@ -1676,6 +1884,9 @@ msgstr "Rotation y"
msgid "Rotation z"
msgstr "Rotation z"
msgid "Run Config Wizard"
msgstr "Kør opsætningsguide"
msgid "S"
msgstr "S"
@@ -1715,12 +1926,15 @@ msgstr "Skalér"
msgid "Screen Grab"
msgstr "Skærmindfangning"
msgid "Screen Grab / FFmpeg"
msgstr "Skærmindfangning / FFmpeg"
msgid "Screen grab"
msgstr "Skærmindfangning"
msgid "Search automatically"
msgstr "Søg automatisk"
msgid "Search manually"
msgstr "Søg manuelt"
msgid "Select a clip before copying"
msgstr "Vælg et klip før kopiér"
@@ -1750,9 +1964,6 @@ msgstr "Vælg standard billedredigeringsprogram"
msgid "Select default video player"
msgstr "Vælg standard videoafspilningsprogram"
msgid "Select region..."
msgstr "Vælg region..."
msgid "Selected zone"
msgstr "Valgt zone"
@@ -1786,12 +1997,18 @@ msgstr "Sæt zone start"
msgid "Shift"
msgstr "Skift"
msgid "Show All"
msgstr "Vis all"
msgid "Show audio thumbnails"
msgstr "Vis lydminiaturer"
msgid "Show background"
msgstr "Vis baggrund"
msgid "Show crash log"
msgstr "Vis nedbrudslog"
msgid "Show experimental formats"
msgstr "Vis eksperimentielle profiler"
@@ -1858,6 +2075,12 @@ msgstr "Sox reverb lydeffekt"
msgid "Sox vibro audio effect"
msgstr "Sox vibro lydeffekt"
msgid "Space"
msgstr "Tomrum"
msgid "Spacer tool"
msgstr "Tomrumsværktøj"
msgid "Speed"
msgstr "Hastighed"
@@ -1909,6 +2132,9 @@ msgstr "Tekstklip"
msgid "TextLabel"
msgstr "Tekstlabel"
msgid "The custom profile was modified, do you want to save it ?"
msgstr "Den tilpassede profil blev ændret. Ønsker du at gemme den?"
msgid "There is no clip, cannot extract frame."
msgstr "Der er ikke noget klip, kan ikke udtrække frame."
@@ -1921,6 +2147,9 @@ msgstr ""
"nogle basale indstillinger. Du vil være klar til at redigere din først file "
"i løbet af få sekunder..."
msgid "This project type is unsupported and can't be loaded."
msgstr "Denne projekttype er ikke understøttet og kan ikke indlæses."
msgid "Threshold"
msgstr "Grænse"
@@ -1960,15 +2189,18 @@ msgstr "Værktøj"
msgid "Top"
msgstr "Top"
msgid "Track"
msgstr "Spor"
msgid "Track height"
msgstr "Sporhøjde"
msgid "Tracks"
msgstr "Spor"
msgid "Transition"
msgstr "Overgang"
msgid "Transition type"
msgstr "Overgangstype"
msgid "Transparency"
msgstr "Gennemsigtighed"
@@ -1978,6 +2210,12 @@ msgstr "Gennemsigtig baggrund"
msgid "Turn clip colors to sepia"
msgstr "Ændre klipfarver til sepia"
msgid "Type"
msgstr "Type"
msgid "Unable to open project"
msgstr "Ude af stand til at åbne projekt"
#, kde-format
msgid "Unable to write to file %1"
msgstr "Kunne ikke skrive til fil %1"
@@ -2036,15 +2274,15 @@ msgstr "Videoopløsning"
msgid "Video Standard"
msgstr "Videostandard"
msgid "Video capture params"
msgstr "Videoindspilningsparametre"
msgid "Video clip"
msgstr "Videoklip"
msgid "Video codec"
msgstr "Videoindkodning"
msgid "Video device"
msgstr "Videoenhed"
msgid "Video driver:"
msgstr "Videodrivprogram"
@@ -2054,15 +2292,15 @@ msgstr "Videoindex"
msgid "Video player"
msgstr "Videoafspiller"
msgid "Video track"
msgstr "Videospor"
msgid "Video tracks"
msgstr "Videospor"
msgid "Video4Linux"
msgstr "Video4Linux"
msgid "Video4Linux / FFmpeg"
msgstr "Video4Linux / FFmpeg"
msgid "View"
msgstr "Vis"
@@ -2121,21 +2359,59 @@ msgstr "Y:"
msgid "Year"
msgstr "År"
#, kde-format
msgid ""
"You have changed the project folder. Do you want to copy the cached data "
"from %1 to the new folder %2 ?"
msgstr ""
"Du har ændret projektmappen. Ønsker du at kopiere de mellemlagrede datat "
"fra %1 til den nye mappe %2 ?"
#, kde-format
msgid "You must be in an empty space to remove space (time=%1, track:%2)"
msgstr "Du skal være i et tomrum for at fjerne tomrum (tid=%1, spor:%2)"
msgid "You must copy exactly one clip before pasting effects"
msgstr "Du skal kopiere præcist et klip før du indsætter effekter"
msgid "You must select one clip for this action"
msgstr "Du skal vælge et klip for denne handling"
msgid "You must select one transition for this action"
msgstr "Du skal vælge en overgang for denne handling"
msgid "Z-Index:"
msgstr "Z-index:"
msgid "Zoom In"
msgstr "Zoom in"
msgid "Zoom Out"
msgstr "Zoom ud"
msgid "Zoom:"
msgstr "Zoom:"
msgid "after"
msgstr "efter"
msgid "before"
msgstr "før"
msgid "create new points"
msgstr "opret nye punkter"
msgid ""
"dvgrab utility not found,\n"
" please install it for firewire capture"
msgstr ""
"dvgrab programmet ikke fundet,\n"
" installér det venligst for firewire indfangning"
#, kde-format
msgid "dvgrab version %1 at %2"
msgstr "dvgrab version %1 i %2"
msgid "effect"
msgstr "effekt"
@@ -2160,9 +2436,6 @@ msgstr "flyt på X akse"
msgid "move on Y axis"
msgstr "flyt på Y akse"
msgid "ogg"
msgstr "ogg"
msgid "oss"
msgstr "oss"
@@ -2184,6 +2457,9 @@ msgstr "opdater værder på tidslinie"
msgid "video4linux2"
msgstr "video4linux2"
msgid "with track"
msgstr "med spor"
msgid "x"
msgstr "x"
@@ -2193,3 +2469,54 @@ msgstr "x1"
msgid "your MLT installation cannot be found. Install MLT and restart Kdenlive.\n"
msgstr "din MLT installation kan ikke findes. Installér MLT og genstart Kdenlive.\n"
#~ msgid "Cannot add marker if more than one clip is selected"
#~ msgstr "Kan ikke tilføje markør, hvis mere end et klip er valgt"
#~ msgid "Cannot delete marker if more than one clip is selected"
#~ msgstr "Kan ikke slette en markør, hvis mere end et klip er valgt"
#~ msgid "Cannot edit marker if more than one clip is selected"
#~ msgstr "Kan ikke redigere markør, hvis mere end et klip er valgt"
#~ msgid "Capturing..."
#~ msgstr "Indspiller..."
#~ msgid "Encoding"
#~ msgstr "Indkodning"
#~ msgid "File extension"
#~ msgstr "Filendelse"
#~ msgid "Firewire / dvgrab"
#~ msgstr "Firewire / dvgrab"
#~ msgid "No clip at cursor time"
#~ msgstr "Intet klip ved pegertid"
#~ msgid "No clip selected"
#~ msgstr "Intet klip valgt"
#~ msgid "No selected clip at cursor time"
#~ msgstr "Intet valgt klip ved pegertid"
#~ msgid "Playback params"
#~ msgstr "Afspilningsparametre"
#~ msgid "Screen Grab / FFmpeg"
#~ msgstr "Skærmindfangning / FFmpeg"
#~ msgid "Select region..."
#~ msgstr "Vælg region..."
#~ msgid "Transition type"
#~ msgstr "Overgangstype"
#~ msgid "Video capture params"
#~ msgstr "Videoindspilningsparametre"
#~ msgid "Video4Linux / FFmpeg"
#~ msgstr "Video4Linux / FFmpeg"
#~ msgid "ogg"
#~ msgstr "ogg"

File diff suppressed because it is too large Load Diff

3
po/de/todo.txt Normal file
View File

@@ -0,0 +1,3 @@
s/sec/Sek./...
dB instead of db (also cpp files)
Spaces before ? (cpp)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

2
po/he/CMakeLists.txt Normal file
View File

@@ -0,0 +1,2 @@
GETTEXT_PROCESS_PO_FILES(he ALL INSTALL_DESTINATION share/locale/ kdenlive.po)

3698
po/he/kdenlive.po Normal file

File diff suppressed because it is too large Load Diff

2
po/hu/CMakeLists.txt Normal file
View File

@@ -0,0 +1,2 @@
GETTEXT_PROCESS_PO_FILES(hu ALL INSTALL_DESTINATION share/locale/ kdenlive.po)

5346
po/hu/kdenlive.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

2
po/pt_BR/CMakeLists.txt Normal file
View File

@@ -0,0 +1,2 @@
GETTEXT_PROCESS_PO_FILES(pt_BR ALL INSTALL_DESTINATION share/locale/ kdenlive.po)

2159
po/pt_BR/kdenlive.po Normal file

File diff suppressed because it is too large Load Diff

3
po/ru/CMakeLists.txt Normal file
View File

@@ -0,0 +1,3 @@
GETTEXT_PROCESS_PO_FILES(ru ALL INSTALL_DESTINATION share/locale/ kdenlive.po)

3600
po/ru/kdenlive.po Normal file

File diff suppressed because it is too large Load Diff

2
po/sl/CMakeLists.txt Normal file
View File

@@ -0,0 +1,2 @@
GETTEXT_PROCESS_PO_FILES(sl ALL INSTALL_DESTINATION share/locale/ kdenlive.po)

2104
po/sl/kdenlive.po Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
#! /bin/sh
FILES="`find -type f -wholename './src/*.cpp'` `find -type f -wholename './src/*.h'`"
FILES="`find -type f -wholename './src/*.cpp'` `find -type f -wholename './src/*.h'` `find -type f -wholename './renderer/*.cpp'` `find -type f -wholename './renderer/*.h'` `find -type f -wholename './plugins/*.cpp'` `find -type f -wholename './plugins/*.h'` `find -type f -wholename './thumbnailer/*.cpp'` `find -type f -wholename './thumbnailer/*.h'`"
if [ $# -gt 0 ]
then

View File

@@ -1,5 +1,18 @@
include_directories (
${QDBUS_INCLUDE_DIRS}
${KDE4_INCLUDES}
${CMAKE_SOURCE_DIR}
${CMAKE_BINARY_DIR}
)
LINK_LIBRARIES(
${LIBMLT_LIBRARY}
${LIBMLTPLUS_LIBRARY}
${NEPOMUK_LIBRARIES}
)
set(kdenlive_render_SRCS
kdenlive_render.cpp
renderjob.cpp
@@ -11,6 +24,6 @@ target_link_libraries(kdenlive_render
${QT_QTCORE_LIBRARY}
${QT_QTDBUS_LIBRARY}
)
install(TARGETS kdenlive_render DESTINATION ${BIN_INSTALL_DIR})

View File

@@ -38,6 +38,11 @@ int main(int argc, char **argv) {
erase = true;
args.takeFirst();
}
bool usekuiserver = false;
if (args.at(0) == "-kuiserver") {
usekuiserver = true;
args.takeFirst();
}
if (args.at(0).startsWith("in=")) {
in = args.at(0).section('=', -1).toInt();
args.takeFirst();
@@ -48,7 +53,7 @@ int main(int argc, char **argv) {
}
if (args.at(0).startsWith("preargs=")) {
QString a = args.at(0).section('=', 1);
preargs = a.split(" ", QString::SkipEmptyParts);
preargs = a.split(" ", QString::SkipEmptyParts);
args.takeFirst();
}
QString render = args.at(0);
@@ -63,14 +68,15 @@ int main(int argc, char **argv) {
args.takeFirst();
QString dest = args.at(0);
args.takeFirst();
RenderJob *job = new RenderJob(erase, 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(erase, usekuiserver, render, profile, rendermodule, player, src, dest, preargs, args, in, out);
job->start();
qDebug()<<"//STARTING RENDERING: "<<erase<<","<<render<<","<<profile<<","<<rendermodule<<","<<player<<","<<src<<","<<dest<<","<<preargs<<","<<args<<","<<in<<","<<out;
app.exec();
} else {
fprintf(stderr, "Kdenlive video renderer for MLT.\nUsage: "
"kdenlive_render [-erase] [in=pos] [out=pos] [render] [profile] [rendermodule] [player] [src] [dest] [[arg1] [arg2] ...]\n"
"kdenlive_render [-erase] [-kuiserver] [in=pos] [out=pos] [render] [profile] [rendermodule] [player] [src] [dest] [[arg1] [arg2] ...]\n"
" -erase: if that parameter is present, src file will be erased at the end\n"
" -kuiserver: if that parameter is present, use KDE job tracker\n"
" in=pos: start rendering at frame pos\n"
" out=pos: end rendering at frame pos\n"
" render: path to inigo render\n"

View File

@@ -19,22 +19,21 @@
#include <QtDBus>
#include <QFile>
#include <QTime>
#include <QThread>
#include "renderjob.h"
// Can't believe I need to do this to sleep.
class SleepThread : QThread {
public:
virtual void run() {};
static void msleep(unsigned long msecs) {
QThread::msleep(msecs);
}
};
// Can't believe I need to do this to sleep.
class SleepThread : QThread {
public:
virtual void run() {};
static void msleep(unsigned long msecs) {
QThread::msleep(msecs);
}
};
static QDBusConnection connection(QLatin1String(""));
RenderJob::RenderJob(bool erase, 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_jobUiserver(NULL) {
RenderJob::RenderJob(bool erase, bool usekuiserver, 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_usekuiserver(usekuiserver), m_jobUiserver(NULL), m_kdenliveinterface(NULL) {
m_scenelist = scenelist;
m_dest = dest;
m_player = player;
@@ -47,125 +46,230 @@ RenderJob::RenderJob(bool erase, const QString &renderer, const QString &profile
if (out != -1) m_args << "out=" + QString::number(out);
m_args << preargs;
//qDebug()<<"PRE ARGS: "<<preargs;
m_args << "-profile" << profile;
if (scenelist.startsWith("consumer:")) {
// Use MLT's producer_consumer, needs a different syntax for profile:
m_args << "profile=" + profile;
} else m_args << "-profile" << profile;
m_args << "-consumer" << rendermodule + ":" + m_dest << "progress=1" << args;
connect(m_renderProcess, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(slotIsOver(int, QProcess::ExitStatus)));
m_renderProcess->setReadChannel(QProcess::StandardError);
/*
// Create a log of every render process.
m_logfile.setAutoRemove(false);
m_logfile.setFileTemplate(QDir::tempPath() + "/kdenlive_render.log.XXXXXXXX");
if (m_logfile.open()) {
qDebug() << "Writing render log to " << m_logfile.fileName();
} else {
qDebug() << "Unable to log to " << m_logfile.fileName();
}
m_logstream.setDevice(&m_logfile);
m_logstream << "Log starting. Dumping contents of " << scenelist << endl;
QFile file(scenelist);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
m_logstream << "Unable to read contents of " << scenelist << endl;
} else {
m_logstream.flush();
QTextStream in(&file);
m_logstream << in.readAll() << endl;
}
*/
}
RenderJob::~RenderJob() {
if (m_renderProcess) delete m_renderProcess;
// m_logfile.close();
}
void RenderJob::slotAbort(const QString& url) {
if (m_dest == url) slotAbort();
}
void RenderJob::slotAbort() {
qDebug() << "Kdenlive-render: JOB ABORTED BY USER...";
m_renderProcess->kill();
if (m_jobUiserver) QDBusReply<QString> reply = m_jobUiserver->call("terminate", "");
if (m_kdenliveinterface) {
m_dbusargs[1] = -3;
m_dbusargs.append(QString());
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, "setRenderingFinished", m_dbusargs);
}
if (m_jobUiserver) m_jobUiserver->call("terminate", QString());
if (m_erase) {
QFile f(m_scenelist);
f.remove();
}
QFile f(m_dest);
f.remove();
/*
m_logstream << "Job aborted by user" << endl;
m_logstream.flush();
m_logfile.close();
*/
qApp->quit();
}
void RenderJob::receivedStderr() {
QString result = QString(m_renderProcess->readAllStandardError()).simplified();
result = result.section(" ", -1);
int pro = result.toInt();
if (pro > m_progress) {
m_progress = pro;
if (m_jobUiserver) QDBusReply<QString> reply = m_jobUiserver->call("setPercent", (uint) m_progress);
if (!result.startsWith("Current Frame")) m_errorMessage.append(result + "<br>");
else {
// m_logstream << "ReceivedStderr from inigo: " << result << endl;
result = result.section(" ", -1);
int pro = result.toInt();
if (pro < 0 || pro > 100) return;
if (pro > m_progress) {
m_progress = pro;
if (m_kdenliveinterface) {
if (!m_kdenliveinterface->isValid()) {
delete m_kdenliveinterface;
m_kdenliveinterface = NULL;
// qDebug() << "BROKEN COMMUNICATION WITH KDENLIVE";
} else {
m_dbusargs[1] = pro;
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, "setRenderingProgress", m_dbusargs);
}
} else if (pro % 5 == 0) {
// Try to restart communication with Kdenlive every 5 percents
// qDebug() << "TRYING TO RESTART COMMUNICATION WITH KDENLIVE";
initKdenliveDbusInterface();
}
if (m_jobUiserver) {
m_jobUiserver->call("setPercent", (uint) m_progress);
/*int seconds = m_startTime.secsTo(QTime::currentTime());
seconds = seconds * (100 - m_progress) / m_progress;
m_jobUiserver->call("setDescriptionField", (uint) 1, tr("Remaining time"), QTime().addSecs(seconds).toString("hh:mm:ss"));*/
}
}
}
}
void RenderJob::start() {
QDBusConnectionInterface* interface = QDBusConnection::sessionBus().interface();
if (interface) {
if (!interface->isServiceRegistered("org.kde.JobViewServer")) {
qDebug() << "No org.kde.JobViewServer registered, trying to start kuiserver";
if ( QProcess::startDetached( "kuiserver" ) ) {
qDebug() << "Started kuiserver";
// Give it a couple of seconds to start
QTime t;
t.start();
while ( !interface->isServiceRegistered("org.kde.JobViewServer") && t.elapsed() < 3000 ) {
SleepThread::msleep( 100 ); //Sleep 100 ms
}
} else {
qDebug() << "Failed to start kuiserver";
}
}
if (interface->isServiceRegistered("org.kde.JobViewServer")) {
QDBusInterface kuiserver("org.kde.JobViewServer", "/JobViewServer", "org.kde.JobViewServer");
QDBusReply<QDBusObjectPath> objectPath = kuiserver.call("requestView", "kdenlive", "kdenlive", 1);
QString reply = ((QDBusObjectPath) objectPath).path();
m_jobUiserver = new QDBusInterface("org.kde.JobViewServer", reply, "org.kde.JobView");
QDBusConnection::sessionBus().connect("org.kde.JobViewServer", reply, "org.kde.JobView", "cancelRequested", this, SLOT(slotAbort()));
connect(m_renderProcess, SIGNAL(readyReadStandardError()), this, SLOT(receivedStderr()));
}
if (interface && m_usekuiserver) {
if (!interface->isServiceRegistered("org.kde.JobViewServer")) {
qDebug() << "No org.kde.JobViewServer registered, trying to start kuiserver";
// m_logstream << "No org.kde.JobViewServer registered, trying to start kuiserver";
if (QProcess::startDetached("kuiserver")) {
qDebug() << "Started kuiserver";
// m_logstream << "Started kuiserver";
// Give it a couple of seconds to start
QTime t;
t.start();
while (!interface->isServiceRegistered("org.kde.JobViewServer") && t.elapsed() < 3000) {
SleepThread::msleep(100); //Sleep 100 ms
}
} else {
qDebug() << "Failed to start kuiserver";
// m_logstream << "Failed to start kuiserver";
}
}
if (interface->isServiceRegistered("org.kde.JobViewServer")) {
QDBusInterface kuiserver("org.kde.JobViewServer", "/JobViewServer", "org.kde.JobViewServer");
QDBusReply<QDBusObjectPath> objectPath = kuiserver.call("requestView", "kdenlive", "kdenlive", 0x0001);
QString reply = ((QDBusObjectPath) objectPath).path();
m_jobUiserver = new QDBusInterface("org.kde.JobViewServer", reply, "org.kde.JobView");
if (m_jobUiserver) {
m_startTime = QTime::currentTime();
m_jobUiserver->call("setPercent", (uint) 0);
m_jobUiserver->call("setInfoMessage", tr("Rendering %1").arg(QFileInfo(m_dest).fileName()));
//m_jobUiserver->call("setDescriptionField", (uint) 0, tr("Rendering to"), m_dest);
QDBusConnection::sessionBus().connect("org.kde.JobViewServer", reply, "org.kde.JobView", "cancelRequested", this, SLOT(slotAbort()));
}
}
}
initKdenliveDbusInterface();
// Because of the logging, we connect to stderr in all cases.
connect(m_renderProcess, SIGNAL(readyReadStandardError()), this, SLOT(receivedStderr()));
m_renderProcess->start(m_prog, m_args);
// m_logstream << "Started render process: " << m_prog << " " << m_args.join(" ") << endl;
qDebug() << "Started render process: " << m_prog << " " << m_args.join(" ");
}
void RenderJob::initKdenliveDbusInterface() {
QString kdenliveId;
QDBusConnection connection = QDBusConnection::sessionBus();
QDBusConnectionInterface *ibus = connection.interface();
const QStringList services = ibus->registeredServiceNames();
foreach(const QString &service, services) {
if (!service.startsWith("org.kde.kdenlive"))
continue;
kdenliveId = service;
break;
}
m_dbusargs.clear();
if (kdenliveId.isEmpty()) return;
m_kdenliveinterface = new QDBusInterface(kdenliveId,
"/MainWindow",
"org.kdenlive.MainWindow",
connection,
this);
if (m_kdenliveinterface) {
m_dbusargs.append(m_dest);
m_dbusargs.append((int) 0);
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, "setRenderingProgress", m_dbusargs);
connect(m_kdenliveinterface, SIGNAL(abortRenderJob(const QString &)),
this, SLOT(slotAbort(const QString&)));
}
}
void RenderJob::slotIsOver(int exitcode, QProcess::ExitStatus status) {
if (m_jobUiserver) QDBusReply<QString> reply = m_jobUiserver->call("terminate", "");
if (m_jobUiserver) m_jobUiserver->call("terminate", QString());
if (m_erase) {
QFile f(m_scenelist);
f.remove();
}
if (status == QProcess::CrashExit) {
// rendering crashed
if (m_kdenliveinterface) {
m_dbusargs[1] = (int) - 2;
m_dbusargs.append(m_errorMessage);
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, "setRenderingFinished", m_dbusargs);
}
QStringList args;
args << "--error" << tr("Rendering of %1 aborted, resulting video will probably be corrupted.").arg(m_dest);
// m_logstream << "Rendering of " << m_dest << " aborted, resulting video will probably be corrupted." << endl;
qDebug() << "Rendering of " << m_dest << " aborted, resulting video will probably be corrupted.";
QProcess::startDetached("kdialog", args);
} else {
if (m_kdenliveinterface) {
m_dbusargs[1] = (int) - 1;
m_dbusargs.append(QString());
m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, "setRenderingFinished", m_dbusargs);
}
QDBusConnectionInterface* interface = QDBusConnection::sessionBus().interface();
if (interface && interface->isServiceRegistered("org.kde.knotify")) {
QDBusMessage m = QDBusMessage::createMethodCall("org.kde.knotify",
"/Notify",
"org.kde.KNotify",
"event");
int seconds = m_startTime.secsTo(QTime::currentTime());
QList<QVariant> args;
args.append(QString("RenderFinished")); // action name
args.append(QString("kdenlive")); // app name
args.append(QVariantList()); // contexts
args.append(tr("Rendering of %1 is over").arg(m_dest)); // body
args.append(tr("Rendering of %1 finished in %2").arg(m_dest, QTime(0, 0, seconds).toString("hh:mm:ss"))); // body
args.append(QByteArray()); // app icon
QStringList actionList;
args.append(actionList); // actions
qlonglong wid;
args.append(wid); // win id
/*
uint id = 0;
int timeout = 5000;
QDBusMessage m = QDBusMessage::createMethodCall("org.kde.VisualNotifications",
"/VisualNotifications",
"org.kde.VisualNotifications",
"Notify");
args.append( QString("kdenlive") ); // app_name
args.append( id ); // replaces_id
args.append( QString("kdenlive") ); // app_icon
args.append( tr("Rendering finished")); // summary
args.append( tr("Rendering of %1 is over").arg(m_dest) ); // body
QStringList actionList;
args.append( actionList ); // actions
args.append( QVariantMap() ); // hints - unused atm
args.append( timeout ); // expire timout
*/
m.setArguments(args);
QDBusMessage replyMsg = QDBusConnection::sessionBus().call(m);
}
// m_logstream << "Rendering of " << m_dest << " finished" << endl;
qDebug() << "Rendering of " << m_dest << " finished";
if (m_player != "-") {
// m_logstream << "Starting player" << endl;
QStringList args;
args << m_dest;
QProcess::startDetached(m_player, args);

View File

@@ -24,11 +24,15 @@
#include <QProcess>
#include <QObject>
#include <QDBusInterface>
#include <QTime>
// Testing
#include <QTemporaryFile>
#include <QTextStream>
class RenderJob : public QObject {
Q_OBJECT
public:
RenderJob(bool erase, 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, 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 start();
@@ -36,17 +40,28 @@ private slots:
void slotIsOver(int exitcode, QProcess::ExitStatus status);
void receivedStderr();
void slotAbort();
void slotAbort(const QString& url);
private:
QString m_scenelist;
QString m_dest;
int m_progress;
QProcess *m_renderProcess;
QString m_errorMessage;
QString m_prog;
QString m_player;
QStringList m_args;
bool m_erase;
QDBusInterface *m_jobUiserver;
QDBusInterface *m_kdenliveinterface;
QList<QVariant> m_dbusargs;
QTime m_startTime;
void initKdenliveDbusInterface();
bool m_usekuiserver;
/** \brief Used to create a temporary file for logging */
QTemporaryFile m_logfile;
/** \brief Used to write to the log file */
QTextStream m_logstream;
};
#endif

View File

@@ -4,24 +4,25 @@ add_subdirectory( mimetypes )
find_package(Nepomuk REQUIRED)
include_directories(
include_directories (
${QDBUS_INCLUDE_DIRS}
${CMAKE_SOURCE_DIR}
${CMAKE_BINARY_DIR}
${KDE4_INCLUDES}
${CMAKE_SOURCE_DIR}/src/widgets
${LIBMLT_INCLUDE_DIR}
${LIBMLTPLUS_INCLUDE_DIR}
${LIBFFMPEG_INCLUDE_DIR}
${FFMPEG_HEADER_PATH}
${NEPOMUK_INCLUDES}
)
LINK_LIBRARIES(
${LIBMLT_LIBRARY}
${LIBMLTPLUS_LIBRARY}
${LIBFFMPEG_LIBRARY}
${NEPOMUK_LIBRARIES}
)
kde4_add_ui_files(kdenlive_UI
widgets/timeline_ui.ui
widgets/monitor_ui.ui
@@ -43,6 +44,7 @@ kde4_add_ui_files(kdenlive_UI
widgets/wipeval_ui.ui
widgets/boolval_ui.ui
widgets/colorval_ui.ui
widgets/positionval_ui.ui
widgets/titlewidget_ui.ui
widgets/timelinebuttons_ui.ui
widgets/renderwidget_ui.ui
@@ -58,6 +60,14 @@ kde4_add_ui_files(kdenlive_UI
widgets/geometryval_ui.ui
widgets/wizardstandard_ui.ui
widgets/wizardextra_ui.ui
widgets/wizardcheck_ui.ui
widgets/wizardmltcheck_ui.ui
widgets/spacerdialog_ui.ui
widgets/addtrack_ui.ui
widgets/dvdwizardvob_ui.ui
widgets/dvdwizardmenu_ui.ui
widgets/dvdwizardiso_ui.ui
widgets/dvdwizardstatus_ui.ui
)
set(kdenlive_SRCS
@@ -131,8 +141,18 @@ set(kdenlive_SRCS
abstractgroupitem.cpp
keyframehelper.cpp
editclipcommand.cpp
insertspacecommand.cpp
spacerdialog.cpp
addtrackcommand.cpp
changetrackcommand.cpp
movegroupcommand.cpp
dvdwizardvob.cpp
dvdwizardmenu.cpp
dvdwizard.cpp
)
add_definitions( ${KDE4_DEFINITIONS} )
if(NO_JOGSHUTTLE)
add_definitions(-DNO_JOGSHUTTLE)
else(NO_JOGSHUTTLE)
@@ -140,23 +160,31 @@ else(NO_JOGSHUTTLE)
endif(NO_JOGSHUTTLE)
kde4_add_kcfg_files(kdenlive_SRCS GENERATE_MOC kdenlivesettings.kcfgc )
QT4_ADD_DBUS_ADAPTOR(kdenlive_SRCS org.kdenlive.MainWindow.xml mainwindow.h MainWindow)
kde4_add_executable(kdenlive ${kdenlive_SRCS} ${kdenlive_UI})
target_link_libraries(kdenlive
${KDE4_KDEUI_LIBS}
${KDE4_KIO_LIBS}
${KDE4_KIO_LIBS}
${KDE4_KNEWSTUFF2_LIBS}
${LIBMLTPLUS_LIBRARY}
${LIBMLT_LIBRARY}
${NEPOMUK_LIBRARIES}
${KDE4_KNOTIFYCONFIG_LIBRARY}
)
if (APPLE)
find_package(SDL REQUIRED)
target_link_libraries(kdenlive ${SDL_LIBRARY})
endif (APPLE)
install(TARGETS kdenlive DESTINATION ${BIN_INSTALL_DIR})
install( FILES kdenliveui.rc kdenlive.notifyrc DESTINATION ${DATA_INSTALL_DIR}/kdenlive )
install (FILES kdenlivesettings.kcfg DESTINATION share/config.kcfg)
install (FILES kdenlive.desktop DESTINATION share/applications/kde)
install (FILES application-x-kdenlive.svgz video-mlt-playlist.svgz DESTINATION share/icons/oxygen/scalable/mimetypes)
install( FILES kdenlive.knsrc DESTINATION ${CONFIG_INSTALL_DIR} )
kde4_install_icons( ${ICON_INSTALL_DIR} )

View File

@@ -28,6 +28,7 @@
#include "abstractclipitem.h"
#include "customtrackscene.h"
#include "kdenlivesettings.h"
AbstractClipItem::AbstractClipItem(const ItemInfo info, const QRectF& rect, double fps): QGraphicsRectItem(rect), m_track(0), m_fps(fps), m_editedKeyframe(-1), m_selectedKeyframe(0), m_keyframeFactor(1) {
setFlags(/*QGraphicsItem::ItemClipsToShape | */QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
@@ -65,6 +66,11 @@ void AbstractClipItem::setCropStart(GenTime pos) {
m_cropStart = pos;
}
void AbstractClipItem::updateItem() {
m_track = (int)(scenePos().y() / KdenliveSettings::trackheight());
m_startPos = GenTime((int) scenePos().x(), m_fps);
}
void AbstractClipItem::updateRectGeometry() {
setRect(0, 0, cropDuration().frames(m_fps) - 0.02, rect().height());
}
@@ -77,7 +83,9 @@ void AbstractClipItem::resizeStart(int posx, double speed) {
if (type() == AVWIDGET && cropStart() + durationDiff < GenTime()) {
durationDiff = GenTime() - cropStart();
} else if (durationDiff >= m_cropDuration) {
durationDiff = m_cropDuration - GenTime(3, m_fps);
return;
if (m_cropDuration > GenTime(3, m_fps)) durationDiff = GenTime(3, m_fps);
else return;
}
m_startPos += durationDiff;
@@ -85,41 +93,49 @@ void AbstractClipItem::resizeStart(int posx, double speed) {
m_cropDuration = m_cropDuration - durationDiff * speed;
setRect(0, 0, cropDuration().frames(m_fps) - 0.02, rect().height());
setPos((qreal) m_startPos.frames(m_fps), pos().y());
setPos(m_startPos.frames(m_fps), pos().y());
if ((int) pos().x() != posx) {
//kDebug()<<"////// WARNING, DIFF IN XPOS: "<<pos().x()<<" == "<<m_startPos.frames(m_fps);
GenTime diff = GenTime((int) pos().x() - posx, m_fps);
if (type() == AVWIDGET) m_cropStart = m_cropStart + diff;
m_cropDuration = m_cropDuration - diff;
setRect(0, 0, cropDuration().frames(m_fps) - 0.02, rect().height());
//kDebug()<<"// NEW START: "<<m_startPos.frames(25)<<", NW DUR: "<<m_cropDuration.frames(25);
}
//kDebug() << "-- NEW CLIP=" << startPos().frames(25) << "-" << endPos().frames(25);
//setRect((double) m_startPos.frames(m_fps) * scale, rect().y(), (double) m_cropDuration.frames(m_fps) * scale, rect().height());
if (durationDiff < GenTime()) {
QList <QGraphicsItem *> collisionList = collidingItems(Qt::IntersectsItemBoundingRect);
for (int i = 0; i < collisionList.size(); ++i) {
QGraphicsItem *item = collisionList.at(i);
if (item->type() == type() && item->pos().x() < pos().x()) {
kDebug() << "///////// COLLISION DETECTED!!!!!!!!!";
GenTime diff = ((AbstractClipItem *)item)->endPos() + GenTime(1, m_fps) - m_startPos;
setRect(0, 0, (m_cropDuration - diff).frames(m_fps) - 0.02, rect().height());
setPos((qreal)(m_startPos + diff).frames(m_fps), pos().y());
m_startPos += diff;
if (type() == AVWIDGET) m_cropStart += diff;
m_cropDuration = m_cropDuration - diff;
break;
/* if (durationDiff < GenTime()) {
QList <QGraphicsItem *> collisionList = collidingItems(Qt::IntersectsItemBoundingRect);
for (int i = 0; i < collisionList.size(); ++i) {
QGraphicsItem *item = collisionList.at(i);
if (item->type() == type() && item->pos().x() < pos().x()) {
kDebug() << "///////// COLLISION DETECTED!!!!!!!!!";
GenTime diff = ((AbstractClipItem *)item)->endPos() + GenTime(1, m_fps) - m_startPos;
setRect(0, 0, (m_cropDuration - diff).frames(m_fps) - 0.02, rect().height());
setPos((m_startPos + diff).frames(m_fps), pos().y());
m_startPos += diff;
if (type() == AVWIDGET) m_cropStart += diff;
m_cropDuration = m_cropDuration - diff;
break;
}
}
}
}
}*/
}
void AbstractClipItem::resizeEnd(int posx, double speed, bool updateKeyFrames) {
GenTime durationDiff = GenTime(posx, m_fps) - endPos();
if (durationDiff == GenTime()) return;
//kDebug() << "-- RESCALE: CROP=" << m_cropStart << ", DIFF = " << durationDiff;
kDebug() << "// DUR DIFF1:" << durationDiff.frames(25) << ", ADJUSTED: " << durationDiff.frames(25) * speed << ", SPED:" << speed;
//kDebug() << "// DUR DIFF1:" << durationDiff.frames(25) << ", ADJUSTED: " << durationDiff.frames(25) * speed << ", SPED:" << speed;
if (cropDuration() + durationDiff <= GenTime()) {
durationDiff = GenTime() - (cropDuration() - GenTime(3, m_fps));
} else if (cropStart() + cropDuration() + durationDiff >= maxDuration()) {
kDebug() << "// MAX OVERLOAD:" << cropDuration().frames(25) << " + " << durationDiff.frames(25) << ", MAX:" << maxDuration().frames(25);
//kDebug() << "// MAX OVERLOAD:" << cropDuration().frames(25) << " + " << durationDiff.frames(25) << ", MAX:" << maxDuration().frames(25);
durationDiff = maxDuration() - cropDuration() - cropStart();
}
kDebug() << "// DUR DIFF2:" << durationDiff.frames(25) << ", ADJUSTED: " << durationDiff.frames(25) * speed << ", SPED:" << speed;
//kDebug() << "// DUR DIFF2:" << durationDiff.frames(25) << ", ADJUSTED: " << durationDiff.frames(25) * speed << ", SPED:" << speed;
m_cropDuration += durationDiff * speed;
setRect(0, 0, cropDuration().frames(m_fps) - 0.02, rect().height());
if (durationDiff > GenTime()) {
@@ -127,12 +143,12 @@ void AbstractClipItem::resizeEnd(int posx, double speed, bool updateKeyFrames) {
for (int i = 0; i < collisionList.size(); ++i) {
QGraphicsItem *item = collisionList.at(i);
if (item->type() == type() && item->pos().x() > pos().x()) {
kDebug() << "///////// COLLISION DETECTED!!!!!!!!!";
/*kDebug() << "///////// COLLISION DETECTED!!!!!!!!!";
kDebug() << "///////// CURRENT: " << startPos().frames(25) << "x" << endPos().frames(25) << ", RECT: " << rect() << "-" << pos();
kDebug() << "///////// COLLISION: " << ((AbstractClipItem *)item)->startPos().frames(25) << "x" << ((AbstractClipItem *)item)->endPos().frames(25) << ", RECT: " << ((AbstractClipItem *)item)->rect() << "-" << item->pos();
kDebug() << "///////// COLLISION: " << ((AbstractClipItem *)item)->startPos().frames(25) << "x" << ((AbstractClipItem *)item)->endPos().frames(25) << ", RECT: " << ((AbstractClipItem *)item)->rect() << "-" << item->pos();*/
GenTime diff = ((AbstractClipItem *)item)->startPos() - GenTime(1, m_fps) - startPos();
m_cropDuration = diff;
setRect(0, 0, (m_cropDuration.frames(m_fps)) - 0.02, rect().height());
m_cropDuration = diff * speed;
setRect(0, 0, cropDuration().frames(m_fps) - 0.02, rect().height());
break;
}
}

View File

@@ -41,6 +41,7 @@ public:
ItemInfo info() const;
CustomTrackScene* projectScene();
void updateRectGeometry();
void updateItem();
virtual OPERATIONTYPE operationMode(QPointF pos) = 0;
virtual GenTime startPos() const ;

View File

@@ -21,6 +21,7 @@
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QScrollBar>
#include <QStyleOptionGraphicsItem>
#include <QToolTip>
#include <KDebug>
@@ -32,6 +33,7 @@
#include "customtrackscene.h"
AbstractGroupItem::AbstractGroupItem(double fps): QGraphicsItemGroup(), m_fps(fps) {
setZValue(2);
setFlags(QGraphicsItem::ItemClipsToShape | QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
}
@@ -48,17 +50,16 @@ CustomTrackScene* AbstractGroupItem::projectScene() {
return NULL;
}
QPolygonF AbstractGroupItem::groupShape(QPointF offset) {
QPainterPath AbstractGroupItem::groupShape(QPointF offset) {
QPainterPath path;
QList<QGraphicsItem *> children = childItems();
QPolygonF path;
for (int i = 0; i < children.count(); i++) {
if (children.at(i)->type() == AVWIDGET) {
QPolygonF r = QPolygonF(children.at(i)->sceneBoundingRect());
path = path.united(r);
QRectF r(children.at(i)->sceneBoundingRect());
r.translate(offset);
path.addRect(r);
}
}
path.translate(offset);
return path;
}
@@ -76,101 +77,105 @@ void AbstractGroupItem::fixItemRect() {
}
// virtual
void AbstractGroupItem::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWidget *) {
p->fillRect(boundingRect(), QColor(200, 100, 100, 100));
void AbstractGroupItem::paint(QPainter *p, const QStyleOptionGraphicsItem *option, QWidget *) {
p->fillRect(option->exposedRect, QColor(200, 100, 100, 100));
}
//virtual
QVariant AbstractGroupItem::itemChange(GraphicsItemChange change, const QVariant &value) {
if (change == ItemPositionChange && scene()) {
// calculate new position.
const int trackHeight = KdenliveSettings::trackheight();
QPointF newPos = value.toPointF();
int xpos = projectScene()->getSnapPointForPos((int) newPos.x(), KdenliveSettings::snaptopoints());
xpos = qMax(xpos, 0);
newPos.setX(xpos);
//kDebug()<<"// GRP MOVE: "<<pos().y()<<"->"<<newPos.y();
QPointF start = pos();//sceneBoundingRect().topLeft();
int posx = start.x() + newPos.x(); //projectScene()->getSnapPointForPos(start.x() + sc.x(), KdenliveSettings::snaptopoints());
int startTrack = (start.y() + KdenliveSettings::trackheight() / 2) / KdenliveSettings::trackheight();
int newTrack = (newPos.y()) / KdenliveSettings::trackheight();
QPointF start = pos();
int startTrack = (start.y() + trackHeight / 2) / trackHeight;
int newTrack = (newPos.y()) / trackHeight;
//kDebug()<<"// GROUP NEW T:"<<newTrack<<",START T:"<<startTrack<<",MAX:"<<projectScene()->tracksCount() - 1;
newTrack = qMin(newTrack, projectScene()->tracksCount() - (int)(boundingRect().height() + 5) / KdenliveSettings::trackheight());
newTrack = qMin(newTrack, projectScene()->tracksCount() - (int)(boundingRect().height() + 5) / trackHeight);
newTrack = qMax(newTrack, 0);
newPos.setY((int)((newTrack) * KdenliveSettings::trackheight()));
//kDebug() << "------------------------------------GRUOP MOVE";
// Check if top item is a clip or a transition
int offset = 0;
int topTrack = -1;
QList<QGraphicsItem *> children = childItems();
for (int i = 0; i < children.count(); i++) {
int currentTrack = (int)(children.at(i)->scenePos().y() / trackHeight);
if (children.at(i)->type() == AVWIDGET) {
if (topTrack == -1 || currentTrack <= topTrack) {
offset = 0;
topTrack = currentTrack;
}
} else if (children.at(i)->type() == TRANSITIONWIDGET) {
if (topTrack == -1 || currentTrack < topTrack) {
offset = (int)(trackHeight / 3 * 2 - 1);
topTrack = currentTrack;
}
}
}
newPos.setY((int)((newTrack) * trackHeight) + offset);
if (newPos == start) return start;
if (start.x() + newPos.x() - pos().x() < 0) {
if (newPos.x() < 0) {
// If group goes below 0, adjust position to 0
return QPointF(pos().x() - start.x(), pos().y());
}
QPolygonF sceneShape = groupShape(newPos - pos());
QList<QGraphicsItem*> collindingItems = scene()->items(sceneShape, Qt::IntersectsItemShape);
QList<QGraphicsItem *> children = childItems();
QPainterPath shape = groupShape(newPos - pos());
QList<QGraphicsItem*> collindingItems = scene()->items(shape, Qt::IntersectsItemShape);
for (int i = 0; i < children.count(); i++) {
collindingItems.removeAll(children.at(i));
}
if (collindingItems.isEmpty()) return newPos;
else {
bool forwardMove = newPos.x() > start.x();
int offset = 0;
const double width = sceneBoundingRect().width() + 1;
for (int i = 0; i < collindingItems.count(); i++) {
QGraphicsItem *collision = collindingItems.at(i);
if (collision->type() == AVWIDGET) {
// Collision
return pos();
//TODO: improve movement when collision happens
/*if (startTrack != newTrack) return pos();
if (collision->pos().x() > pos().x()) {
return QPointF(collision->sceneBoundingRect().x() - sceneBoundingRect().width() + pos().x() - start.x() - 1, newPos.y());
}*/
//kDebug()<<"// COLLISION WIT:"<<collision->sceneBoundingRect();
if (newPos.y() != start.y()) {
// Track change results in collision, restore original position
return start;
}
AbstractClipItem *item = static_cast <AbstractClipItem *>(collision);
if (forwardMove) {
// Moving forward, determine best pos
QPainterPath clipPath;
clipPath.addRect(item->sceneBoundingRect());
QPainterPath res = shape.intersected(clipPath);
offset = qMax(offset, (int)(res.boundingRect().width() + 0.5));
} else {
// Moving backward, determine best pos
QPainterPath clipPath;
clipPath.addRect(item->sceneBoundingRect());
QPainterPath res = shape.intersected(clipPath);
offset = qMax(offset, (int)(res.boundingRect().width() + 0.5));
}
}
}
if (offset > 0) {
if (forwardMove) {
newPos.setX(newPos.x() - offset);
} else {
newPos.setX(newPos.x() + offset);
}
// If there is still a collision after our position adjust, restore original pos
collindingItems = scene()->items(groupShape(newPos - pos()), Qt::IntersectsItemShape);
for (int i = 0; i < children.count(); i++) {
collindingItems.removeAll(children.at(i));
}
for (int i = 0; i < collindingItems.count(); i++)
if (collindingItems.at(i)->type() == AVWIDGET) return pos();
}
return newPos;
}
//else posx -= startx;
//posx = qMax(posx, 0);
//newPos.setX(posx);
//kDebug()<<"Y POS: "<<start.y() + newPos.y()<<"SCN MP: "<<sc;
/*int newTrack = (start.y() + newPos.y()) / KdenliveSettings::trackheight();
int oldTrack = (start.y() + pos().y()) / KdenliveSettings::trackheight();
newPos.setY((newTrack) * KdenliveSettings::trackheight() - start.y() + 1);*/
//if (start.y() + newPos.y() < 1) newTrack = oldTrack;
return newPos;
// Only one clip is moving
QList<QGraphicsItem*> items = scene()->items(sceneShape, Qt::IntersectsItemShape);
if (!items.isEmpty()) {
for (int i = 0; i < items.count(); i++) {
if (items.at(i)->type() == AVWIDGET) {
// Collision!
//kDebug()<<"/// COLLISION WITH ITEM: "<<items.at(i)->sceneBoundingRect();
return pos();
QPointF otherPos = items.at(i)->pos();
if ((int) otherPos.y() != (int) pos().y()) return pos();
if (pos().x() < otherPos.x()) {
// move clip just before colliding clip
int npos = (static_cast < AbstractClipItem* >(items.at(i))->startPos()).frames(m_fps) - sceneBoundingRect().width();
newPos.setX(npos);
} else {
// get pos just after colliding clip
int npos = static_cast < AbstractClipItem* >(items.at(i))->endPos().frames(m_fps);
newPos.setX(npos);
}
return newPos;
}
}
}
return newPos;
}
return QGraphicsItem::itemChange(change, value);
return QGraphicsItemGroup::itemChange(change, value);
}

View File

@@ -41,7 +41,7 @@ protected:
virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
private:
QPolygonF groupShape(QPointF);
QPainterPath groupShape(QPointF);
void fixItemRect();
double m_fps;
};

View File

@@ -20,23 +20,22 @@
#include <KLocale>
#include "addfoldercommand.h"
#include "kdenlivedoc.h"
#include "projectlist.h"
AddFolderCommand::AddFolderCommand(KdenliveDoc *doc, const QString folderName, const QString &clipId, bool doIt)
: m_doc(doc), m_name(folderName), m_id(clipId), m_doIt(doIt) {
AddFolderCommand::AddFolderCommand(ProjectList *view, const QString folderName, const QString &clipId, bool doIt, QUndoCommand *parent) : QUndoCommand(parent), m_view(view), m_name(folderName), m_id(clipId), m_doIt(doIt) {
if (doIt) setText(i18n("Add folder"));
else setText(i18n("Delete folder"));
}
// virtual
void AddFolderCommand::undo() {
if (m_doIt) m_doc->deleteFolder(m_name, m_id);
else m_doc->addFolder(m_name, m_id, false);
if (m_doIt) m_view->slotAddFolder(m_name, m_id, true);
else m_view->slotAddFolder(m_name, m_id, false);
}
// virtual
void AddFolderCommand::redo() {
if (m_doIt) m_doc->addFolder(m_name, m_id, false);
else m_doc->deleteFolder(m_name, m_id);
if (m_doIt) m_view->slotAddFolder(m_name, m_id, false);
else m_view->slotAddFolder(m_name, m_id, true);
}

View File

@@ -23,17 +23,17 @@
#include <QUndoCommand>
class KdenliveDoc;
class ProjectList;
class AddFolderCommand : public QUndoCommand {
public:
AddFolderCommand(KdenliveDoc *doc, const QString folderName, const QString &clipId, bool doIt);
AddFolderCommand(ProjectList *view, const QString folderName, const QString &clipId, bool doIt, QUndoCommand *parent = 0);
virtual void undo();
virtual void redo();
private:
KdenliveDoc *m_doc;
ProjectList *m_view;
QString m_name;
QString m_id;
bool m_doIt;

View File

@@ -31,7 +31,7 @@ AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElemen
// virtual
void AddTimelineClipCommand::undo() {
if (!m_remove) m_view->deleteClip(m_clipInfo);
else m_view->addClip(m_xml, m_clipId, m_clipInfo);
else m_view->addClip(m_xml, m_clipId, m_clipInfo, m_effects);
}
// virtual
void AddTimelineClipCommand::redo() {

47
src/addtrackcommand.cpp Normal file
View File

@@ -0,0 +1,47 @@
/***************************************************************************
* Copyright (C) 2007 by Jean-Baptiste Mardelle (jb@kdenlive.org) *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
#include <KLocale>
#include "addtrackcommand.h"
#include "customtrackview.h"
AddTrackCommand::AddTrackCommand(CustomTrackView *view, int ix, TrackInfo info, bool addTrack, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_ix(ix), m_info(info), m_addTrack(addTrack), m_doIt(doIt) {
if (addTrack) setText(i18n("Add track"));
else setText(i18n("Delete track"));
}
// virtual
void AddTrackCommand::undo() {
// kDebug()<<"---- undoing action";
m_doIt = true;
if (m_addTrack) m_view->removeTrack(m_ix);
else m_view->addTrack(m_info, m_ix);
}
// virtual
void AddTrackCommand::redo() {
kDebug() << "---- redoing action";
if (m_doIt) {
if (m_addTrack) m_view->addTrack(m_info, m_ix);
else m_view->removeTrack(m_ix);
}
m_doIt = true;
}

48
src/addtrackcommand.h Normal file
View File

@@ -0,0 +1,48 @@
/***************************************************************************
* Copyright (C) 2007 by Jean-Baptiste Mardelle (jb@kdenlive.org) *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
#ifndef ADDTRACKCOMMAND_H
#define ADDTRACKCOMMAND_H
#include <QUndoCommand>
#include <QGraphicsView>
#include <QPointF>
#include <KDebug>
#include "definitions.h"
class CustomTrackView;
class AddTrackCommand : public QUndoCommand {
public:
AddTrackCommand(CustomTrackView *view, int ix, TrackInfo info, bool addTrack, bool doIt, QUndoCommand * parent = 0);
virtual void undo();
virtual void redo();
private:
CustomTrackView *m_view;
int m_ix;
bool m_doIt;
bool m_addTrack;
TrackInfo m_info;
};
#endif

View File

@@ -0,0 +1,41 @@
/***************************************************************************
* Copyright (C) 2007 by Jean-Baptiste Mardelle (jb@kdenlive.org) *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
#include <KLocale>
#include "changetrackcommand.h"
#include "customtrackview.h"
ChangeTrackCommand::ChangeTrackCommand(CustomTrackView *view, int ix, TrackInfo oldInfo, TrackInfo newInfo, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_ix(ix), m_oldinfo(oldInfo), m_newinfo(newInfo), m_doIt(doIt) {
setText(i18n("Change track type"));
}
// virtual
void ChangeTrackCommand::undo() {
// kDebug()<<"---- undoing action";
m_doIt = true;
m_view->changeTrack(m_ix, m_oldinfo);
}
// virtual
void ChangeTrackCommand::redo() {
if (m_doIt) m_view->changeTrack(m_ix, m_newinfo);
m_doIt = true;
}

48
src/changetrackcommand.h Normal file
View File

@@ -0,0 +1,48 @@
/***************************************************************************
* Copyright (C) 2007 by Jean-Baptiste Mardelle (jb@kdenlive.org) *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
#ifndef CHANGETRACKCOMMAND_H
#define CHANGETRACKCOMMAND_H
#include <QUndoCommand>
#include <QGraphicsView>
#include <QPointF>
#include <KDebug>
#include "definitions.h"
class CustomTrackView;
class ChangeTrackCommand : public QUndoCommand {
public:
ChangeTrackCommand(CustomTrackView *view, int ix, TrackInfo oldInfo, TrackInfo newInfo, bool doIt, QUndoCommand * parent = 0);
virtual void undo();
virtual void redo();
private:
CustomTrackView *m_view;
int m_ix;
bool m_doIt;
TrackInfo m_oldinfo;
TrackInfo m_newinfo;
};
#endif

View File

@@ -40,12 +40,17 @@
#include "kthumb.h"
ClipItem::ClipItem(DocClipBase *clip, ItemInfo info, double fps, bool generateThumbs)
: AbstractClipItem(info, QRectF(), fps), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), audioThumbWasDrawn(false), m_opacity(1.0), m_timeLine(0), m_startThumbRequested(false), m_endThumbRequested(false), m_startFade(0), m_endFade(0), m_hover(false), m_selectedEffect(-1), m_speed(1.0), framePixelWidth(0), m_startPix(QPixmap()), m_endPix(QPixmap()) {
setRect(0, 0, (info.endPos - info.startPos).frames(fps) - 0.02, (qreal)(KdenliveSettings::trackheight() - 2));
setPos((qreal) info.startPos.frames(fps), (qreal)(info.track * KdenliveSettings::trackheight()) + 1);
ClipItem::ClipItem(DocClipBase *clip, ItemInfo info, double fps, double speed, bool generateThumbs)
: AbstractClipItem(info, QRectF(), fps), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), audioThumbWasDrawn(false), m_opacity(1.0), m_timeLine(0), m_startThumbRequested(false), m_endThumbRequested(false), m_startFade(0), m_endFade(0), m_hover(false), m_selectedEffect(-1), m_speed(speed), framePixelWidth(0), m_startPix(QPixmap()), m_endPix(QPixmap()) {
setZValue(1);
setRect(0, 0, (info.endPos - info.startPos).frames(fps) - 0.02, (double)(KdenliveSettings::trackheight() - 2));
setPos(info.startPos.frames(fps), (double)(info.track * KdenliveSettings::trackheight()) + 1);
m_clipName = clip->name();
if (m_speed == 1.0) m_clipName = clip->name();
else {
m_clipName = clip->name() + " - " + QString::number(m_speed * 100, 'f', 0) + "%";
m_cropDuration = m_cropDuration * m_speed;
}
m_producer = clip->getId();
m_clipType = clip->clipType();
m_cropStart = info.cropStart;
@@ -107,12 +112,12 @@ ClipItem::~ClipItem() {
}
ClipItem *ClipItem::clone(ItemInfo info) const {
ClipItem *duplicate = new ClipItem(m_clip, info, m_fps);
ClipItem *duplicate = new ClipItem(m_clip, info, m_fps, m_speed);
if (info.cropStart == cropStart()) duplicate->slotSetStartThumb(m_startPix);
if (info.cropStart + (info.endPos - info.startPos) == m_cropStart + m_cropDuration) duplicate->slotSetEndThumb(m_endPix);
kDebug() << "// CLoning clip: " << (info.cropStart + (info.endPos - info.startPos)).frames(m_fps) << ", CURRENT end: " << (cropStart() + duration()).frames(m_fps);
duplicate->setEffectList(m_effectList.clone());
duplicate->setSpeed(m_speed);
//duplicate->setSpeed(m_speed);
return duplicate;
}
@@ -138,6 +143,7 @@ void ClipItem::initEffect(QDomElement effect) {
QDomNodeList params = effect.elementsByTagName("parameter");
for (int i = 0; i < params.count(); i++) {
QDomElement e = params.item(i).toElement();
kDebug() << "// inint eff: " << e.attribute("name");
if (!e.isNull() && e.attribute("type") == "keyframe") {
QString def = e.attribute("default");
// Effect has a keyframe type parameter, we need to set the values
@@ -152,7 +158,7 @@ void ClipItem::initEffect(QDomElement effect) {
if (effect.attribute("tag") == "volume") {
if (effect.attribute("id") == "fadeout") {
int end = (duration() + cropStart()).frames(m_fps);
int start = end - EffectsList::parameter(effect, "out").toInt();
int start = end - EffectsList::parameter(effect, "in").toInt();
EffectsList::setParameter(effect, "in", QString::number(start));
EffectsList::setParameter(effect, "out", QString::number(end));
} else if (effect.attribute("id") == "fadein") {
@@ -426,14 +432,22 @@ void ClipItem::slotThumbReady(int frame, QPixmap pix) {
}
}
void ClipItem::slotSetStartThumb(QPixmap pix) {
void ClipItem::slotSetStartThumb(const QPixmap pix) {
m_startPix = pix;
}
void ClipItem::slotSetEndThumb(QPixmap pix) {
void ClipItem::slotSetEndThumb(const QPixmap pix) {
m_endPix = pix;
}
QPixmap ClipItem::startThumb() const {
return m_startPix;
}
QPixmap ClipItem::endThumb() const {
return m_endPix;
}
void ClipItem::slotGotAudioData() {
audioThumbReady = true;
if (m_clipType == AV) {
@@ -452,7 +466,9 @@ DocClipBase *ClipItem::baseClip() const {
}
QDomElement ClipItem::xml() const {
return m_clip->toXML();
QDomElement xml = m_clip->toXML();
if (m_speed != 1.0) xml.setAttribute("speed", m_speed);
return xml;
}
int ClipItem::clipType() const {
@@ -463,6 +479,10 @@ QString ClipItem::clipName() const {
return m_clipName;
}
void ClipItem::setClipName(const QString &name) {
m_clipName = name;
}
const QString &ClipItem::clipProducer() const {
return m_producer;
}
@@ -486,7 +506,9 @@ void ClipItem::animate(qreal value) {
void ClipItem::paint(QPainter *painter,
const QStyleOptionGraphicsItem *option,
QWidget *) {
painter->setOpacity(m_opacity);
/*if (parentItem()) m_opacity = 0.5;
else m_opacity = 1.0;
painter->setOpacity(m_opacity);*/
QBrush paintColor = brush();
if (isSelected()) paintColor = QBrush(QColor(79, 93, 121));
QRectF br = rect();
@@ -506,7 +528,7 @@ void ClipItem::paint(QPainter *painter,
//build path around clip
//QPainterPath resultClipPath = roundRectPathUpper.united(roundRectPathLower);
//painter->fillPath(resultClipPath, paintColor);
painter->fillRect(br, paintColor);
painter->fillRect(exposed, paintColor);
//painter->setClipPath(resultClipPath, Qt::IntersectClip);
@@ -881,7 +903,7 @@ void ClipItem::setFadeIn(int pos) {
if (pos == m_startFade) return;
int oldIn = m_startFade;
if (pos < 0) pos = 0;
if (pos > m_cropDuration.frames(m_fps)) pos = (int)(m_cropDuration.frames(m_fps) / 2);
if (pos > m_cropDuration.frames(m_fps)) pos = (int)(m_cropDuration.frames(m_fps));
m_startFade = pos;
QRectF rect = boundingRect();
update(rect.x(), rect.y(), qMax(oldIn, pos), rect.height());
@@ -891,7 +913,7 @@ void ClipItem::setFadeOut(int pos) {
if (pos == m_endFade) return;
int oldOut = m_endFade;
if (pos < 0) pos = 0;
if (pos > m_cropDuration.frames(m_fps)) pos = (int)(m_cropDuration.frames(m_fps) / 2);
if (pos > m_cropDuration.frames(m_fps)) pos = (int)(m_cropDuration.frames(m_fps));
m_endFade = pos;
QRectF rect = boundingRect();
update(rect.x() + rect.width() - qMax(oldOut, pos), rect.y(), qMax(oldOut, pos), rect.height());
@@ -943,10 +965,12 @@ void ClipItem::resizeStart(int posx, double speed) {
if (posx == startPos().frames(m_fps)) return;
const int previous = cropStart().frames(m_fps);
AbstractClipItem::resizeStart(posx, m_speed);
checkEffectsKeyframesPos(previous, cropStart().frames(m_fps), true);
if (m_hasThumbs && KdenliveSettings::videothumbnails()) {
/*connect(m_clip->thumbProducer(), SIGNAL(thumbReady(int, QPixmap)), this, SLOT(slotThumbReady(int, QPixmap)));*/
startThumbTimer->start(100);
if ((int) cropStart().frames(m_fps) != previous) {
checkEffectsKeyframesPos(previous, cropStart().frames(m_fps), true);
if (m_hasThumbs && KdenliveSettings::videothumbnails()) {
/*connect(m_clip->thumbProducer(), SIGNAL(thumbReady(int, QPixmap)), this, SLOT(slotThumbReady(int, QPixmap)));*/
startThumbTimer->start(150);
}
}
}
@@ -954,13 +978,15 @@ void ClipItem::resizeEnd(int posx, double speed, bool updateKeyFrames) {
const int max = (startPos() - cropStart() + maxDuration()).frames(m_fps) + 1;
if (posx > max) posx = max;
if (posx == endPos().frames(m_fps)) return;
kDebug() << "// NEW POS: " << posx << ", OLD END: " << endPos().frames(m_fps);
//kDebug() << "// NEW POS: " << posx << ", OLD END: " << endPos().frames(m_fps);
const int previous = (cropStart() + duration()).frames(m_fps);
AbstractClipItem::resizeEnd(posx, m_speed);
if (updateKeyFrames) checkEffectsKeyframesPos(previous, (cropStart() + duration()).frames(m_fps), false);
if (m_hasThumbs && KdenliveSettings::videothumbnails()) {
/*connect(m_clip->thumbProducer(), SIGNAL(thumbReady(int, QPixmap)), this, SLOT(slotThumbReady(int, QPixmap)));*/
endThumbTimer->start(100);
if ((int)(cropStart() + duration()).frames(m_fps) != previous) {
if (updateKeyFrames) checkEffectsKeyframesPos(previous, (cropStart() + duration()).frames(m_fps), false);
if (m_hasThumbs && KdenliveSettings::videothumbnails()) {
/*connect(m_clip->thumbProducer(), SIGNAL(thumbReady(int, QPixmap)), this, SLOT(slotThumbReady(int, QPixmap)));*/
endThumbTimer->start(150);
}
}
}
@@ -1000,18 +1026,17 @@ void ClipItem::checkEffectsKeyframesPos(const int previous, const int current, b
if (m_selectedEffect >= 0) setSelectedEffect(m_selectedEffect);
}
//virtual
QVariant ClipItem::itemChange(GraphicsItemChange change, const QVariant &value) {
if (change == ItemPositionChange && scene()) {
// calculate new position.
if (group() != 0) return pos();
if (parentItem()) return pos();
QPointF newPos = value.toPointF();
//kDebug() << "/// MOVING CLIP ITEM.------------";
//kDebug() << "/// MOVING CLIP ITEM.------------\n++++++++++";
int xpos = projectScene()->getSnapPointForPos((int) newPos.x(), KdenliveSettings::snaptopoints());
xpos = qMax(xpos, 0);
newPos.setX(xpos);
int newTrack = (newPos.y() + KdenliveSettings::trackheight() / 2) / KdenliveSettings::trackheight();
int newTrack = newPos.y() / KdenliveSettings::trackheight();
newTrack = qMin(newTrack, projectScene()->tracksCount() - 1);
newTrack = qMax(newTrack, 0);
newPos.setY((int)(newTrack * KdenliveSettings::trackheight() + 1));
@@ -1020,38 +1045,40 @@ QVariant ClipItem::itemChange(GraphicsItemChange change, const QVariant &value)
sceneShape.translate(newPos);
QList<QGraphicsItem*> items = scene()->items(sceneShape, Qt::IntersectsItemShape);
items.removeAll(this);
bool forwardMove = newPos.x() > pos().x();
int offset = 0;
if (!items.isEmpty()) {
for (int i = 0; i < items.count(); i++) {
if (items.at(i)->type() == type()) {
// Collision!
QPointF otherPos = items.at(i)->pos();
if ((int) otherPos.y() != (int) pos().y()) return pos();
if (pos().x() < otherPos.x()) {
// move clip just before colliding clip
int npos = (static_cast < AbstractClipItem* >(items.at(i))->startPos() - m_cropDuration).frames(m_fps);
// check we don't run into another clip
newPos.setX(npos);
sceneShape = rect();
sceneShape.translate(newPos);
QList<QGraphicsItem*> subitems = scene()->items(sceneShape, Qt::IntersectsItemShape);
items.removeAll(this);
for (int j = 0; j < subitems.count(); j++) {
if (subitems.at(j)->type() == type()) return pos();
}
if ((int) otherPos.y() != (int) pos().y()) {
return pos();
}
if (forwardMove) {
offset = qMax(offset, (int)(newPos.x() - (static_cast < AbstractClipItem* >(items.at(i))->startPos() - cropDuration()).frames(m_fps)));
} else {
// get pos just after colliding clip
int npos = static_cast < AbstractClipItem* >(items.at(i))->endPos().frames(m_fps);
// check we don't run into another clip
newPos.setX(npos);
sceneShape = rect();
sceneShape.translate(newPos);
offset = qMax(offset, (int)((static_cast < AbstractClipItem* >(items.at(i))->endPos().frames(m_fps)) - newPos.x()));
}
if (offset > 0) {
if (forwardMove) {
sceneShape.translate(QPointF(-offset, 0));
newPos.setX(newPos.x() - offset);
} else {
sceneShape.translate(QPointF(offset, 0));
newPos.setX(newPos.x() + offset);
}
QList<QGraphicsItem*> subitems = scene()->items(sceneShape, Qt::IntersectsItemShape);
items.removeAll(this);
subitems.removeAll(this);
for (int j = 0; j < subitems.count(); j++) {
if (subitems.at(j)->type() == type()) return pos();
if (subitems.at(j)->type() == type()) {
m_startPos = GenTime((int) pos().x(), m_fps);
return pos();
}
}
}
m_track = newTrack;
m_startPos = GenTime((int) newPos.x(), m_fps);
return newPos;
@@ -1105,38 +1132,47 @@ void ClipItem::setEffectAt(int ix, QDomElement effect) {
}
}
QHash <QString, QString> ClipItem::addEffect(QDomElement effect, bool animate) {
QHash <QString, QString> effectParams;
EffectsParameterList ClipItem::addEffect(QDomElement effect, bool animate) {
bool needRepaint = false;
/*QDomDocument doc;
doc.appendChild(doc.importNode(effect, true));
kDebug() << "/////// CLIP ADD EFFECT: " << doc.toString();*/
m_effectList.append(effect);
effectParams["tag"] = effect.attribute("tag");
EffectsParameterList parameters;
parameters.addParam("tag", effect.attribute("tag"));
parameters.addParam("kdenlive_ix", effect.attribute("kdenlive_ix"));
if (effect.hasAttribute("src")) parameters.addParam("src", effect.attribute("src"));
QString state = effect.attribute("disabled");
if (!state.isEmpty()) {
parameters.addParam("disabled", state);
}
QString effectId = effect.attribute("id");
if (effectId.isEmpty()) effectId = effect.attribute("tag");
effectParams["id"] = effectId;
effectParams["kdenlive_ix"] = effect.attribute("kdenlive_ix");
QString state = effect.attribute("disabled");
if (!state.isEmpty()) effectParams["disabled"] = state;
parameters.addParam("id", effectId);
QDomNodeList params = effect.elementsByTagName("parameter");
int fade = 0;
for (int i = 0; i < params.count(); i++) {
QDomElement e = params.item(i).toElement();
if (!e.isNull()) {
if (e.attribute("type") == "keyframe") {
effectParams["keyframes"] = e.attribute("keyframes");
effectParams["min"] = e.attribute("min");
effectParams["max"] = e.attribute("max");
effectParams["factor"] = e.attribute("factor", "1");
effectParams["starttag"] = e.attribute("starttag", "start");
effectParams["endtag"] = e.attribute("endtag", "end");
parameters.addParam("keyframes", e.attribute("keyframes"));
parameters.addParam("max", e.attribute("max"));
parameters.addParam("min", e.attribute("min"));
parameters.addParam("factor", e.attribute("factor", "1"));
parameters.addParam("starttag", e.attribute("starttag", "start"));
parameters.addParam("endtag", e.attribute("endtag", "end"));
}
double f = e.attribute("factor", "1").toDouble();
if (f == 1) {
effectParams[e.attribute("name")] = e.attribute("value");
parameters.addParam(e.attribute("name"), e.attribute("value"));
// check if it is a fade effect
if (effectId == "fadein") {
needRepaint = true;
@@ -1148,7 +1184,7 @@ QHash <QString, QString> ClipItem::addEffect(QDomElement effect, bool animate) {
else if (e.attribute("name") == "in") fade += e.attribute("value").toInt();
}
} else {
effectParams[e.attribute("name")] = QString::number(e.attribute("value").toDouble() / f);
parameters.addParam(e.attribute("name"), QString::number(e.attribute("value").toDouble() / f));
}
}
}
@@ -1167,28 +1203,32 @@ QHash <QString, QString> ClipItem::addEffect(QDomElement effect, bool animate) {
m_selectedEffect = 0;
setSelectedEffect(m_selectedEffect);
}
return effectParams;
return parameters;
}
QHash <QString, QString> ClipItem::getEffectArgs(QDomElement effect) {
QHash <QString, QString> effectParams;
effectParams["tag"] = effect.attribute("tag");
effectParams["kdenlive_ix"] = effect.attribute("kdenlive_ix");
effectParams["id"] = effect.attribute("id");
EffectsParameterList ClipItem::getEffectArgs(QDomElement effect) {
EffectsParameterList parameters;
parameters.addParam("tag", effect.attribute("tag"));
parameters.addParam("kdenlive_ix", effect.attribute("kdenlive_ix"));
parameters.addParam("id", effect.attribute("id"));
if (effect.hasAttribute("src")) parameters.addParam("src", effect.attribute("src"));
QString state = effect.attribute("disabled");
if (!state.isEmpty()) effectParams["disabled"] = state;
if (!state.isEmpty()) {
parameters.addParam("disabled", state);
}
QDomNodeList params = effect.elementsByTagName("parameter");
for (int i = 0; i < params.count(); i++) {
QDomElement e = params.item(i).toElement();
//kDebug() << "/ / / /SENDING EFFECT PARAM: " << e.attribute("type") << ", NAME_ " << e.attribute("tag");
if (e.attribute("type") == "keyframe") {
kDebug() << "/ / / /SENDING KEYFR EFFECT TYPE";
effectParams["keyframes"] = e.attribute("keyframes");
effectParams["max"] = e.attribute("max");
effectParams["min"] = e.attribute("min");
effectParams["factor"] = e.attribute("factor", "1");
effectParams["starttag"] = e.attribute("starttag", "start");
effectParams["endtag"] = e.attribute("endtag", "end");
parameters.addParam("keyframes", e.attribute("keyframes"));
parameters.addParam("max", e.attribute("max"));
parameters.addParam("min", e.attribute("min"));
parameters.addParam("factor", e.attribute("factor", "1"));
parameters.addParam("starttag", e.attribute("starttag", "start"));
parameters.addParam("endtag", e.attribute("endtag", "end"));
} else if (e.attribute("namedesc").contains(";")) {
QString format = e.attribute("format");
QStringList separators = format.split("%d", QString::SkipEmptyParts);
@@ -1201,14 +1241,16 @@ QHash <QString, QString> ClipItem::getEffectArgs(QDomElement effect) {
txtNeu << separators[i];
txtNeu << (int)(values[i+1].toDouble());
}
effectParams["start"] = neu;
parameters.addParam("start", neu);
} else {
if (e.attribute("factor", "1") != "1")
effectParams[e.attribute("name")] = QString::number(e.attribute("value").toDouble() / e.attribute("factor").toDouble());
else effectParams[e.attribute("name")] = e.attribute("value");
if (e.attribute("factor", "1") != "1") {
parameters.addParam(e.attribute("name"), QString::number(e.attribute("value").toDouble() / e.attribute("factor").toDouble()));
} else {
parameters.addParam(e.attribute("name"), e.attribute("value"));
}
}
}
return effectParams;
return parameters;
}
void ClipItem::deleteEffect(QString index) {
@@ -1225,7 +1267,10 @@ void ClipItem::deleteEffect(QString index) {
needRepaint = true;
}
m_effectList.removeAt(i);
} else if (ix.toInt() > index.toInt()) m_effectList[i].setAttribute("kdenlive_ix", ix.toInt() - 1);
i--;
} else if (ix.toInt() > index.toInt()) {
m_effectList[i].setAttribute("kdenlive_ix", ix.toInt() - 1);
}
}
m_effectNames = m_effectList.effectNames().join(" / ");
if (needRepaint) update(boundingRect());

View File

@@ -40,7 +40,7 @@ class ClipItem : public AbstractClipItem {
Q_OBJECT
public:
ClipItem(DocClipBase *clip, ItemInfo info, double fps, bool generateThumbs = true);
ClipItem(DocClipBase *clip, ItemInfo info, double fps, double speed, bool generateThumbs = true);
virtual ~ ClipItem();
virtual void paint(QPainter *painter,
const QStyleOptionGraphicsItem *option,
@@ -53,6 +53,7 @@ public:
int clipType() const;
DocClipBase *baseClip() const;
QString clipName() const;
void setClipName(const QString &name);
QDomElement xml() const;
ClipItem *clone(ItemInfo info) const;
const EffectsList effectList();
@@ -61,9 +62,9 @@ public:
/** Give a string list of the clip's effect names */
QStringList effectNames();
/** Add an effect to the clip and return the parameters that will be passed to Mlt */
QHash <QString, QString> addEffect(QDomElement effect, bool animate = true);
EffectsParameterList addEffect(QDomElement effect, bool animate = true);
/** Get the effect parameters that will be passed to Mlt */
QHash <QString, QString> getEffectArgs(QDomElement effect);
EffectsParameterList getEffectArgs(QDomElement effect);
/** Delete effect with id index */
void deleteEffect(QString index);
/** return the number of effects in that clip */
@@ -101,6 +102,8 @@ public:
GenTime cropDuration() const;
int hasEffect(const QString &tag, const QString &id) const;
bool checkKeyFrames();
QPixmap startThumb() const;
QPixmap endThumb() const;
protected:
//virtual void mouseMoveEvent(QGraphicsSceneMouseEvent * event);
@@ -157,10 +160,12 @@ private slots:
void animate(qreal value);
void slotSetStartThumb(QImage img);
void slotSetEndThumb(QImage img);
void slotSetStartThumb(QPixmap pix);
void slotSetEndThumb(QPixmap pix);
void slotThumbReady(int frame, QPixmap pix);
public slots:
void slotSetStartThumb(const QPixmap pix);
void slotSetEndThumb(const QPixmap pix);
signals:
void getThumb(int, int);
void prepareAudioThumb(double, int, int, int);

View File

@@ -26,14 +26,26 @@
#include "docclipbase.h"
#include "kdenlivedoc.h"
#include <mlt++/Mlt.h>
ClipManager::ClipManager(KdenliveDoc *doc): m_doc(doc), m_audioThumbsEnabled(false), m_audioThumbsQueue(QList <QString> ()), m_generatingAudioId(QString()) {
m_clipIdCounter = 1;
m_folderIdCounter = 1;
}
ClipManager::~ClipManager() {
qDeleteAll(m_clipList);
}
void ClipManager::clear() {
qDeleteAll(m_clipList);
m_clipList.clear();
m_clipIdCounter = 1;
m_folderIdCounter = 1;
m_folderList.clear();
m_audioThumbsQueue.clear();
}
void ClipManager::checkAudioThumbs() {
if (m_audioThumbsEnabled == KdenliveSettings::audiothumbnails()) return;
m_audioThumbsEnabled = KdenliveSettings::audiothumbnails();
@@ -92,14 +104,20 @@ void ClipManager::setThumbsProgress(const QString &message, int progress) {
m_doc->setThumbsProgress(message, progress);
}
QList <DocClipBase*> ClipManager::documentClipList() {
QList <DocClipBase*> ClipManager::documentClipList() const {
return m_clipList;
}
QMap <QString, QString> ClipManager::documentFolderList() const {
return m_folderList;
}
void ClipManager::addClip(DocClipBase *clip) {
m_clipList.append(clip);
const QString id = clip->getId();
if (id.toInt() >= m_clipIdCounter) m_clipIdCounter = id.toInt() + 1;
const QString gid = clip->getProperty("groupid");
if (!gid.isEmpty() && gid.toInt() >= m_folderIdCounter) m_folderIdCounter = gid.toInt() + 1;
}
void ClipManager::slotDeleteClip(const QString &clipId) {
@@ -115,7 +133,9 @@ void ClipManager::slotDeleteClip(const QString &clipId) {
void ClipManager::deleteClip(const QString &clipId) {
for (int i = 0; i < m_clipList.count(); i++) {
if (m_clipList.at(i)->getId() == clipId) {
m_clipList.removeAt(i);
DocClipBase *clip = m_clipList.takeAt(i);
delete clip;
clip = NULL;
break;
}
}
@@ -137,6 +157,49 @@ DocClipBase *ClipManager::getClipById(QString clipId) {
return NULL;
}
DocClipBase *ClipManager::getClipByResource(QString resource) {
for (int i = 0; i < m_clipList.count(); i++) {
if (m_clipList.at(i)->getProperty("resource") == resource) {
return m_clipList.at(i);
}
}
return NULL;
}
void ClipManager::updatePreviewSettings() {
for (int i = 0; i < m_clipList.count(); i++) {
if (m_clipList.at(i)->clipType() == AV || m_clipList.at(i)->clipType() == VIDEO) {
if (m_clipList.at(i)->producerProperty("meta.media.0.codec.name") && strcmp(m_clipList.at(i)->producerProperty("meta.media.0.codec.name"), "h264") == 0) {
if (KdenliveSettings::dropbframes()) {
m_clipList[i]->setProducerProperty("skip_loop_filter", "all");
m_clipList[i]->setProducerProperty("skip_frame", "bidir");
} else {
m_clipList[i]->setProducerProperty("skip_loop_filter", "");
m_clipList[i]->setProducerProperty("skip_frame", "");
}
}
}
}
}
void ClipManager::resetProducersList(QList <Mlt::Producer *> prods) {
for (int i = 0; i < m_clipList.count(); i++) {
if (m_clipList.at(i)->numReferences() > 0) {
m_clipList.at(i)->deleteProducers();
}
}
QString id;
for (int i = 0; i < prods.count(); i++) {
id = prods.at(i)->get("id");
if (id.contains('_')) id = id.section('_', 0, 0);
DocClipBase *clip = getClipById(id);
if (clip) {
clip->setProducer(prods.at(i));
kDebug() << "// // // REPLACE CLIP: " << id;
}
}
}
void ClipManager::slotAddClipList(const KUrl::List urls, const QString group, const QString &groupId) {
QUndoCommand *addClips = new QUndoCommand();
addClips->setText(i18n("Add clips"));
@@ -254,8 +317,22 @@ int ClipManager::getFreeClipId() {
return m_clipIdCounter++;
}
int ClipManager::getFreeFolderId() {
return m_folderIdCounter++;
}
int ClipManager::lastClipId() const {
return m_clipIdCounter - 1;
}
QString ClipManager::projectFolder() const {
return m_doc->projectFolder().path();
}
void ClipManager::addFolder(const QString &id, const QString &name) {
m_folderList.insert(id, name);
}
void ClipManager::deleteFolder(const QString &id) {
m_folderList.remove(id);
}

View File

@@ -39,6 +39,10 @@
class KdenliveDoc;
class DocClipBase;
namespace Mlt {
class Producer;
};
class ClipManager: public QObject {
Q_OBJECT public:
@@ -54,23 +58,36 @@ Q_OBJECT public:
void slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const QString &groupId);
void slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, const int softness, const QString group, const QString &groupId);
DocClipBase *getClipById(QString clipId);
DocClipBase *getClipByResource(QString resource);
void slotDeleteClip(const QString & clipId);
void setThumbsProgress(const QString &message, int progress);
void checkAudioThumbs();
QList <DocClipBase*> documentClipList();
QList <DocClipBase*> documentClipList() const;
QMap <QString, QString> documentFolderList() const;
int getFreeClipId();
int getFreeFolderId();
int lastClipId() const;
void startAudioThumbsGeneration();
void endAudioThumbsGeneration(const QString &requestedId);
void askForAudioThumb(const QString &id);
QString projectFolder() const;
void resetProducersList(QList <Mlt::Producer *> prods);
void addFolder(const QString&, const QString&);
void deleteFolder(const QString&);
void clear();
public slots:
void updatePreviewSettings();
private: // Private attributes
/** the list of clips in the document */
QList <DocClipBase*> m_clipList;
QMap <QString, QString> m_folderList;
QList <QString> m_audioThumbsQueue;
/** the document undo stack*/
KdenliveDoc *m_doc;
int m_clipIdCounter;
int m_folderIdCounter;
bool m_audioThumbsEnabled;
QString m_generatingAudioId;

View File

@@ -34,7 +34,8 @@ static const int COLORTAB = 2;
static const int SLIDETAB = 3;
static const int IMAGETAB = 4;
static const int MARKERTAB = 5;
static const int ADVANCEDTAB = 6;
static const int METATAB = 6;
static const int ADVANCEDTAB = 7;
static const int TYPE_JPEG = 0;
static const int TYPE_PNG = 1;
@@ -81,6 +82,16 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
m_view.clip_vindex->setMaximum(props.value("video_max").toInt());
}
// Check for Metadata
QMap<QString, QString> meta = m_clip->metadata();
QMap<QString, QString>::const_iterator i = meta.constBegin();
while (i != meta.constEnd()) {
QTreeWidgetItem *metaitem = new QTreeWidgetItem(m_view.metadata_list);
metaitem->setText(0, i.key()); //i18n(i.key().section('.', 2, 3).toUtf8().data()));
metaitem->setText(1, i.value());
++i;
}
connect(m_view.clip_force_ar, SIGNAL(toggled(bool)), m_view.clip_ar, SLOT(setEnabled(bool)));
connect(m_view.clip_force_threads, SIGNAL(toggled(bool)), m_view.clip_threads, SLOT(setEnabled(bool)));
connect(m_view.clip_force_vindex, SIGNAL(toggled(bool)), m_view.clip_vindex, SLOT(setEnabled(bool)));
@@ -113,6 +124,7 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
m_view.image_transparency->setChecked(props.value("transparency").toInt());
} else if (t == COLOR) {
m_view.clip_path->setEnabled(false);
m_view.tabWidget->removeTab(METATAB);
m_view.tabWidget->removeTab(IMAGETAB);
m_view.tabWidget->removeTab(SLIDETAB);
m_view.tabWidget->removeTab(AUDIOTAB);
@@ -121,6 +133,7 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
m_view.clip_color->setColor(QColor("#" + props.value("colour").right(8).left(6)));
} else if (t == SLIDESHOW) {
m_view.clip_path->setText(url.directory());
m_view.tabWidget->removeTab(METATAB);
m_view.tabWidget->removeTab(IMAGETAB);
m_view.tabWidget->removeTab(COLORTAB);
m_view.tabWidget->removeTab(AUDIOTAB);
@@ -140,27 +153,38 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
m_view.luma_duration->setText(tc.getTimecodeFromFrames(props.value("luma_duration").toInt()));
QString lumaFile = props.value("luma_file");
QString profilePath = KdenliveSettings::mltpath();
profilePath = profilePath.section('/', 0, -3);
profilePath += "/lumas/PAL/";
QDir dir(profilePath);
QStringList filter;
filter << "*.pgm";
const QStringList result = dir.entryList(filter, QDir::Files);
QStringList imagefiles;
QStringList imagenamelist;
int current;
foreach(const QString file, result) {
m_view.luma_file->addItem(KIcon(profilePath + file), file, profilePath + file);
if (!lumaFile.isEmpty() && lumaFile == QString(profilePath + file))
current = m_view.luma_file->count() - 1;
// Check for Kdenlive installed luma files
QStringList filters;
filters << "*.pgm" << "*.png";
QStringList customLumas = KGlobal::dirs()->findDirs("appdata", "lumas");
foreach(const QString &folder, customLumas) {
QStringList filesnames = QDir(folder).entryList(filters, QDir::Files);
foreach(const QString &fname, filesnames) {
m_view.luma_file->addItem(KIcon(folder + '/' + fname), fname, folder + '/' + fname);
}
}
// Check for MLT lumas
QString profilePath = KdenliveSettings::mltpath();
QString folder = profilePath.section('/', 0, -3);
folder.append("/lumas/PAL"); // TODO: cleanup the PAL / NTSC mess in luma files
QDir lumafolder(folder);
QStringList filesnames = lumafolder.entryList(filters, QDir::Files);
foreach(const QString &fname, filesnames) {
m_view.luma_file->addItem(KIcon(folder + '/' + fname), fname, folder + '/' + fname);
}
slotEnableLuma(m_view.slide_fade->isChecked());
slotEnableLumaFile(m_view.slide_luma->isChecked());
if (!lumaFile.isEmpty()) {
m_view.slide_luma->setChecked(true);
m_view.luma_file->setCurrentIndex(current);
}
m_view.luma_file->setCurrentIndex(m_view.luma_file->findData(lumaFile));
} else m_view.luma_file->setEnabled(false);
connect(m_view.slide_fade, SIGNAL(stateChanged(int)), this, SLOT(slotEnableLuma(int)));
connect(m_view.slide_luma, SIGNAL(stateChanged(int)), this, SLOT(slotEnableLumaFile(int)));
connect(m_view.image_type, SIGNAL(currentIndexChanged(int)), this, SLOT(parseFolder()));
} else if (t != AUDIO) {
@@ -186,11 +210,12 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
m_view.tabWidget->removeTab(VIDEOTAB);
m_view.clip_thumb->setHidden(true);
}
if (t != IMAGE && t != COLOR && t != TEXT) m_view.clip_duration->setReadOnly(true);
KFileItem f(KFileItem::Unknown, KFileItem::Unknown, url, true);
m_view.clip_filesize->setText(KIO::convertSize(f.size()));
m_view.clip_duration->setText(tc.getTimecode(m_clip->duration(), m_fps));
if (t != IMAGE && t != COLOR && t != TEXT) m_view.clip_duration->setReadOnly(true);
else connect(m_view.clip_duration, SIGNAL(editingFinished()), this, SLOT(slotCheckMaxLength()));
// markers
m_view.marker_new->setIcon(KIcon("document-new"));
@@ -209,6 +234,26 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
adjustSize();
}
void ClipProperties::slotEnableLuma(int state) {
bool enable = false;
if (state == Qt::Checked) enable = true;
m_view.luma_duration->setEnabled(enable);
m_view.slide_luma->setEnabled(enable);
if (enable) {
m_view.luma_file->setEnabled(m_view.slide_luma->isChecked());
} else m_view.luma_file->setEnabled(false);
m_view.label_softness->setEnabled(m_view.slide_luma->isChecked() && enable);
m_view.luma_softness->setEnabled(m_view.label_softness->isEnabled());
}
void ClipProperties::slotEnableLumaFile(int state) {
bool enable = false;
if (state == Qt::Checked) enable = true;
m_view.luma_file->setEnabled(enable);
m_view.luma_softness->setEnabled(enable);
m_view.label_softness->setEnabled(enable);
}
void ClipProperties::slotFillMarkersList() {
m_view.markers_list->clear();
QList < CommentedTime > marks = m_clip->commentedSnapMarkers();
@@ -222,7 +267,7 @@ void ClipProperties::slotFillMarkersList() {
void ClipProperties::slotAddMarker() {
CommentedTime marker(GenTime(), i18n("Marker"));
MarkerDialog d(m_clip, marker, m_tc, this);
MarkerDialog d(m_clip, marker, m_tc, i18n("Add Marker"), this);
if (d.exec() == QDialog::Accepted) {
emit addMarker(m_clip->getId(), d.newMarker().time(), d.newMarker().comment());
}
@@ -233,7 +278,7 @@ void ClipProperties::slotEditMarker() {
QList < CommentedTime > marks = m_clip->commentedSnapMarkers();
int pos = m_view.markers_list->currentIndex().row();
if (pos < 0 || pos > marks.count() - 1) return;
MarkerDialog d(m_clip, marks.at(pos), m_tc, this);
MarkerDialog d(m_clip, marks.at(pos), m_tc, i18n("Edit Marker"), this);
if (d.exec() == QDialog::Accepted) {
emit addMarker(m_clip->getId(), d.newMarker().time(), d.newMarker().comment());
}
@@ -306,11 +351,19 @@ QMap <QString, QString> ClipProperties::properties() {
m_clipNeedsRefresh = true;
props["colour"] = "0x" + new_color.right(6) + "ff";
}
int duration = m_tc.getFrameCount(m_view.clip_duration->text(), m_fps);
if (duration != m_clip->duration().frames(m_fps)) {
props["out"] = QString::number(duration);
}
} else if (t == IMAGE) {
if ((int) m_view.image_transparency->isChecked() != old_props.value("transparency").toInt()) {
props["transparency"] = QString::number((int)m_view.image_transparency->isChecked());
m_clipNeedsRefresh = true;
}
int duration = m_tc.getFrameCount(m_view.clip_duration->text(), m_fps);
if (duration != m_clip->duration().frames(m_fps)) {
props["out"] = QString::number(duration);
}
} else if (t == SLIDESHOW) {
QString value = QString::number((int) m_view.slide_loop->isChecked());
if (old_props.value("loop") != value) props["loop"] = value;
@@ -415,6 +468,13 @@ void ClipProperties::parseFolder() {
m_view.clip_thumb->setPixmap(pix);
}
void ClipProperties::slotCheckMaxLength() {
int duration = m_tc.getFrameCount(m_view.clip_duration->text(), m_fps);
if (duration > m_clip->maxDuration().frames(m_fps)) {
m_view.clip_duration->setText(m_tc.getTimecode(m_clip->maxDuration(), m_fps));
}
}
#include "clipproperties.moc"

View File

@@ -43,6 +43,9 @@ private slots:
void slotEditMarker();
void slotDeleteMarker();
void slotFillMarkersList();
void slotCheckMaxLength();
void slotEnableLuma(int state);
void slotEnableLumaFile(int state);
private:
Ui::ClipProperties_UI m_view;

View File

@@ -60,8 +60,8 @@ CustomRuler::CustomRuler(Timecode tc, CustomTrackView *parent)
littleMarkDistance = FRAME_SIZE;
mediumMarkDistance = FRAME_SIZE * m_timecode.fps();
bigMarkDistance = FRAME_SIZE * m_timecode.fps() * 60;
m_zoneStart = 2 * m_timecode.fps();
m_zoneEnd = 10 * m_timecode.fps();
m_zoneStart = 0;
m_zoneEnd = 100;
m_contextMenu = new QMenu(this);
QAction *addGuide = m_contextMenu->addAction(KIcon("document-new"), i18n("Add Guide"));
connect(addGuide, SIGNAL(triggered()), m_view, SLOT(slotAddGuide()));
@@ -110,6 +110,7 @@ void CustomRuler::mouseMoveEvent(QMouseEvent * event) {
if (pos < 0) pos = 0;
if (m_moveCursor == RULER_CURSOR) {
m_view->setCursorPos(pos);
m_view->slotCheckPositionScrolling();
return;
} else if (m_moveCursor == RULER_START) m_zoneStart = pos;
else if (m_moveCursor == RULER_END) m_zoneEnd = pos;

View File

@@ -77,7 +77,7 @@ double CustomTrackScene::scale() const {
}
int CustomTrackScene::tracksCount() const {
return m_tracksList.count();
return m_document->tracksCount();
}
#include "customtrackscene.moc"

View File

@@ -28,7 +28,6 @@
#include "gentime.h"
class KdenliveDoc;
class TrackInfo;
/** This class holds all properties that need to be used by clip items */
@@ -44,7 +43,6 @@ public:
double getSnapPointForPos(double pos, bool doSnap = true);
void setScale(double scale);
double scale() const;
QList <TrackInfo> m_tracksList;
int tracksCount() const;
QPixmap m_transitionPixmap;

File diff suppressed because it is too large Load Diff

View File

@@ -48,31 +48,31 @@ public:
virtual void mouseReleaseEvent(QMouseEvent * event);
virtual void mouseMoveEvent(QMouseEvent * event);
virtual void mouseDoubleClickEvent(QMouseEvent *event);
void addTrack(TrackInfo type);
void removeTrack();
void addTrack(TrackInfo type, int ix = -1);
void removeTrack(int ix);
void changeTrack(int ix, TrackInfo type);
int cursorPos();
void checkAutoScroll();
void moveClip(const ItemInfo start, const ItemInfo end);
void moveGroup(QList <ItemInfo> startClip, QList <ItemInfo> startTransition, const GenTime offset, const int trackOffset, bool reverseMove = false);
/** move transition, startPos = (old start, old end), endPos = (new start, new end) */
void moveTransition(const ItemInfo start, const ItemInfo end);
void resizeClip(const ItemInfo start, const ItemInfo end);
void addClip(QDomElement xml, const QString &clipId, ItemInfo info, EffectsList list = EffectsList());
void deleteClip(ItemInfo info);
void slotAddClipMarker();
void slotEditClipMarker();
void slotDeleteClipMarker();
void slotDeleteAllClipMarkers();
void slotDeleteClipMarker(const QString &comment, const QString &id, const GenTime &position);
void slotDeleteAllClipMarkers(const QString &id);
void addMarker(const QString &id, const GenTime &pos, const QString comment);
void setScale(double scaleFactor);
void deleteClip(const QString &clipId);
void slotAddEffect(QDomElement effect, GenTime pos, int track);
void addEffect(int track, GenTime pos, QDomElement effect);
void deleteEffect(int track, GenTime pos, QDomElement effect);
void updateEffect(int track, GenTime pos, QDomElement effect, int ix);
void updateEffect(int track, GenTime pos, QDomElement effect, int ix, bool triggeredByUser = true);
void moveEffect(int track, GenTime pos, int oldPos, int newPos);
void addTransition(ItemInfo transitionInfo, int endTrack, QDomElement params);
void deleteTransition(ItemInfo transitionInfo, int endTrack, QDomElement params);
void updateTransition(int track, GenTime pos, QDomElement oldTransition, QDomElement transition);
void updateTransition(int track, GenTime pos, QDomElement oldTransition, QDomElement transition, bool updateTransitionWidget);
void moveTransition(GenTime oldpos, GenTime newpos);
void activateMonitor();
int duration() const;
@@ -80,7 +80,7 @@ public:
void cutSelectedClips();
void setContextMenu(QMenu *timeline, QMenu *clip, QMenu *transition);
void checkTrackHeight();
QList <TrackInfo> tracksList() const;
//QList <TrackInfo> tracksList() const;
void setTool(PROJECTTOOL tool);
void cutClip(ItemInfo info, GenTime cutTime, bool cut);
void slotSeekToPreviousSnap();
@@ -98,6 +98,16 @@ public:
void setDocumentModified();
void setInPoint();
void setOutPoint();
void slotInsertSpace();
void slotRemoveSpace();
void insertSpace(QList<ItemInfo> clipsToMove, QList<ItemInfo> transToMove, int track, const GenTime duration, const GenTime offset);
ClipItem *getActiveClipUnderCursor(bool allowOutsideCursor = false) const;
void deleteTimelineTrack(int ix, TrackInfo trackinfo);
void changeTimelineTrack(int ix, TrackInfo trackinfo);
void saveThumbnails();
void autoTransition();
QStringList getLadspaParams(QDomElement effect) const;
void initCursorPos(int pos);
public slots:
void setCursorPos(int pos, bool seek = true);
@@ -112,6 +122,7 @@ public slots:
void slotAddTransition(ClipItem* clip, ItemInfo transitionInfo, int endTrack, QDomElement transition = QDomElement());
void slotAddTransitionToSelectedClips(QDomElement transition);
void slotTransitionUpdated(Transition *, QDomElement);
void slotTransitionTrackUpdated(Transition *tr, int track);
void slotSwitchTrackAudio(int ix);
void slotSwitchTrackVideo(int ix);
void slotUpdateClip(const QString &clipId);
@@ -127,6 +138,11 @@ public slots:
void pasteClip();
void pasteClipEffects();
void slotUpdateAllThumbs();
void slotCheckPositionScrolling();
void slotInsertTrack(int ix);
void slotDeleteTrack(int ix);
void slotChangeTrack(int ix);
void clipNameChanged(const QString id, const QString name);
protected:
virtual void drawBackground(QPainter * painter, const QRectF & rect);
@@ -167,8 +183,11 @@ private:
void updateSnapPoints(AbstractClipItem *selected);
ClipItem *getClipItemAt(int pos, int track);
ClipItem *getClipItemAt(GenTime pos, int track);
Transition *getTransitionItemAt(int pos, int track);
ClipItem *getClipItemAtEnd(GenTime pos, int track);
ClipItem *getClipItemAtStart(GenTime pos, int track);
Transition *getTransitionItemAt(GenTime pos, int track);
Transition *getTransitionItemAtEnd(GenTime pos, int track);
Transition *getTransitionItemAtStart(GenTime pos, int track);
void checkScrolling();
/** Should we auto scroll while playing (keep in sync with KdenliveSettings::autoscroll() */
bool m_autoScroll;
@@ -176,11 +195,15 @@ private:
QMenu *m_timelineContextMenu;
QMenu *m_timelineContextClipMenu;
QMenu *m_timelineContextTransitionMenu;
QAction *m_autoTransition;
QTimer m_scrollTimer;
int m_scrollOffset;
QList <CommentedTime> m_searchStrings;
int m_findIndex;
PROJECTTOOL m_tool;
QCursor m_razorCursor;
QCursor m_spacerCursor;
/** list containing items currently copied in the timeline */
QList<AbstractClipItem *> m_copiedItems;
/** Used to get the point in timeline where a context menu was opened */
@@ -196,12 +219,14 @@ private:
bool canBeMoved(QList<AbstractClipItem *> items, GenTime offset, int trackOffset) const;
ClipItem *getClipUnderCursor() const;
ClipItem *getMainActiveClip() const;
ClipItem *getActiveClipUnderCursor() const;
bool insertPossible(AbstractGroupItem *group, const QPoint &pos) const;
void resetSelectionGroup(bool selectItems = true);
void groupSelectedItems(bool force = false);
private slots:
void slotRefreshGuides();
void slotEnableRefresh();
void slotCheckMouseScrolling();
signals:
void cursorMoved(int, int);
@@ -209,7 +234,7 @@ signals:
void zoomOut();
void mousePosition(int);
void clipItemSelected(ClipItem*, int ix = -1);
void transitionItemSelected(Transition*);
void transitionItemSelected(Transition*, bool update = false);
void activateDocumentMonitor();
void trackHeightChanged();
void displayMessage(const QString, MessageType);

View File

@@ -28,11 +28,11 @@
const int FRAME_SIZE = 90;
const int MAXCLIPDURATION = 15000;
enum OPERATIONTYPE { NONE = 0, MOVE = 1, RESIZESTART = 2, RESIZEEND = 3, FADEIN = 4, FADEOUT = 5, TRANSITIONSTART = 6, TRANSITIONEND = 7, MOVEGUIDE = 8, KEYFRAME = 9};
enum OPERATIONTYPE { NONE = 0, MOVE = 1, RESIZESTART = 2, RESIZEEND = 3, FADEIN = 4, FADEOUT = 5, TRANSITIONSTART = 6, TRANSITIONEND = 7, MOVEGUIDE = 8, KEYFRAME = 9, SEEK = 10, SPACER = 11, RUBBERSELECTION = 12};
enum CLIPTYPE { UNKNOWN = 0, AUDIO = 1, VIDEO = 2, AV = 3, COLOR = 4, IMAGE = 5, TEXT = 6, SLIDESHOW = 7, VIRTUAL = 8, PLAYLIST = 9, FOLDER = 10};
enum GRAPHICSRECTITEM { AVWIDGET = 70000 , LABELWIDGET , TRANSITIONWIDGET , GROUPWIDGET};
enum PROJECTTOOL { SELECTTOOL = 0 , RAZORTOOL = 1 };
enum PROJECTTOOL { SELECTTOOL = 0 , RAZORTOOL = 1 , SPACERTOOL = 2 };
enum TRANSITIONTYPE {
/** TRANSITIONTYPE: between 0-99: video trans, 100-199: video+audio trans, 200-299: audio trans */
@@ -79,6 +79,55 @@ struct MltVideoProfile {
int display_aspect_den;
};
class EffectParameter {
public:
EffectParameter(const QString name, const QString value): m_name(name), m_value(value) {}
QString name() const {
return m_name;
}
QString value() const {
return m_value;
}
void setValue(const QString value) {
m_value = value;
}
private:
QString m_name;
QString m_value;
};
/** Use our own list for effect parameters so that they are not sorted in any ways, because
some effects like sox need a precise order
*/
class EffectsParameterList: public QList < EffectParameter > {
public:
EffectsParameterList(): QList < EffectParameter >() {}
bool hasParam(const QString name) const {
for (int i = 0; i < size(); i++)
if (at(i).name() == name) return true;
return false;
}
QString paramValue(const QString name, QString defaultValue = QString()) const {
for (int i = 0; i < size(); i++) {
if (at(i).name() == name) return at(i).value();
}
return defaultValue;
}
void addParam(const QString &name, const QString &value) {
if (name.isEmpty()) return;
append(EffectParameter(name, value));
}
void removeParam(const QString name) {
for (int i = 0; i < size(); i++)
if (at(i).name() == name) {
removeAt(i);
break;
}
}
};
class CommentedTime {
public:
CommentedTime(): t(GenTime(0)) {}

View File

@@ -15,6 +15,8 @@
* *
***************************************************************************/
#include <QCryptographicHash>
#include <KDebug>
#include "kdenlivesettings.h"
@@ -23,10 +25,9 @@
#include "clipmanager.h"
DocClipBase::DocClipBase(ClipManager *clipManager, QDomElement xml, const QString &id):
m_id(id), m_description(QString()), m_refcount(0), m_audioThumbCreated(false), m_duration(GenTime()), m_thumbProd(NULL), m_audioTimer(NULL), m_properties(QMap <QString, QString> ()), audioFrameChache(QMap<int, QMap<int, QByteArray> > ()), m_baseTrackProducers(QList <Mlt::Producer *>()) {
m_id(id), m_description(QString()), m_refcount(0), m_audioThumbCreated(false), m_duration(GenTime()), m_thumbProd(NULL), m_audioTimer(NULL), m_properties(QMap <QString, QString> ()), audioFrameChache(QMap<int, QMap<int, QByteArray> > ()), m_baseTrackProducers(QList <Mlt::Producer *>()), m_snapMarkers(QList < CommentedTime > ()) {
int type = xml.attribute("type").toInt();
m_clipType = (CLIPTYPE) type;
m_name = xml.attribute("name");
QDomNamedNodeMap attributes = xml.attributes();
for (unsigned int i = 0; i < attributes.count(); i++) {
@@ -34,6 +35,7 @@ DocClipBase::DocClipBase(ClipManager *clipManager, QDomElement xml, const QStrin
}
KUrl url = KUrl(xml.attribute("resource"));
if (!m_properties.contains("file_hash") && !url.isEmpty()) getFileHash(url.path());
int out = xml.attribute("out").toInt();
if (out != 0) {
setDuration(GenTime(out, KdenliveSettings::project_fps()));
@@ -41,11 +43,11 @@ DocClipBase::DocClipBase(ClipManager *clipManager, QDomElement xml, const QStrin
out = xml.attribute("duration").toInt();
if (out != 0) setDuration(GenTime(out, KdenliveSettings::project_fps()));
}
if (m_name.isEmpty()) m_name = url.fileName();
if (!m_properties.contains("name")) m_properties.insert("name", url.fileName());
//if (!url.isEmpty() && QFile::exists(url.path()))
{
m_thumbProd = new KThumb(clipManager, url, m_id);
m_thumbProd = new KThumb(clipManager, url, m_id, m_properties.value("file_hash"));
if (m_clipType == AV || m_clipType == AUDIO) slotCreateAudioTimer();
}
//kDebug() << "type is video" << (m_clipType == AV) << " " << m_clipType;
@@ -63,8 +65,27 @@ DocClipBase::DocClipBase(ClipManager *clipManager, QDomElement xml, const QStrin
}*/
DocClipBase::~DocClipBase() {
if (m_thumbProd) delete m_thumbProd;
if (m_thumbProd) {
delete m_thumbProd;
}
if (m_audioTimer) {
m_audioTimer->stop();
delete m_audioTimer;
}
qDeleteAll(m_baseTrackProducers);
m_baseTrackProducers.clear();
}
void DocClipBase::setZone(QPoint zone) {
m_properties.insert("zone_in", QString::number(zone.x()));
m_properties.insert("zone_out", QString::number(zone.y()));
}
QPoint DocClipBase::zone() const {
QPoint zone;
zone.setX(m_properties.value("zone_in").toInt());
zone.setY(m_properties.value("zone_out", "50").toInt());
return zone;
}
void DocClipBase::slotCreateAudioTimer() {
@@ -97,13 +118,9 @@ bool DocClipBase::audioThumbCreated() const {
return m_audioThumbCreated;
}
void DocClipBase::setName(const QString name) {
m_name = name;
}
const QString & DocClipBase::name() const {
return m_name;
return m_properties.value("name");
}
const QString &DocClipBase::getId() const {
@@ -163,7 +180,7 @@ const GenTime &DocClipBase::duration() const {
const GenTime &DocClipBase::maxDuration() const {
if (m_clipType == COLOR || m_clipType == IMAGE || m_clipType == TEXT || (m_clipType == SLIDESHOW && m_properties.value("loop") == "1")) {
const GenTime dur(10000, KdenliveSettings::project_fps());
const GenTime dur(15000, KdenliveSettings::project_fps());
return dur;
}
return m_duration;
@@ -248,7 +265,7 @@ const QPixmap & DocClipBase::thumbnail() const {
}
void DocClipBase::updateAudioThumbnail(QMap<int, QMap<int, QByteArray> > data) {
kDebug() << "CLIPBASE RECIEDVED AUDIO DATA*********************************************";
//kDebug() << "CLIPBASE RECIEDVED AUDIO DATA*********************************************";
audioFrameChache = data;
m_audioThumbCreated = true;
emit gotAudioData();
@@ -365,34 +382,44 @@ QString DocClipBase::markerComment(GenTime t) {
return QString::null;
}
void DocClipBase::deleteProducers() {
qDeleteAll(m_baseTrackProducers);
m_baseTrackProducers.clear();
if (m_thumbProd) m_thumbProd->clearProducer();
}
void DocClipBase::setProducer(Mlt::Producer *producer) {
if (producer == NULL) return;
QString id = producer->get("id");
kDebug() << "// SET PRODUCER: " << id;
if (id.contains('_')) {
// this is a subtrack producer, insert it at correct place
int pos = id.section('_', 1, 1).toInt();
kDebug() << "// POS = " << pos << ", MAX: " << m_baseTrackProducers.count();
if (pos >= m_baseTrackProducers.count()) {
while (m_baseTrackProducers.count() - 1 < pos) {
m_baseTrackProducers.append(NULL);
}
}
kDebug() << "// POS = " << pos << ", NEW MAX: " << m_baseTrackProducers.count();
if (m_baseTrackProducers.at(pos) == NULL) m_baseTrackProducers[pos] = producer;
} else m_baseTrackProducers.append(producer);
} else {
if (m_baseTrackProducers.isEmpty()) m_baseTrackProducers.append(producer);
else if (m_baseTrackProducers.at(0) == NULL) m_baseTrackProducers[0] = producer;
}
//m_clipProducer = producer;
//m_clipProducer->set("transparency", m_properties.value("transparency").toInt());
if (m_thumbProd && !m_thumbProd->hasProducer()) m_thumbProd->setProducer(producer);
}
Mlt::Producer *DocClipBase::producer(int track) {
/*for (int i = 0; i < m_baseTrackProducers.count(); i++) {
if (m_baseTrackProducers.at(i)) kDebug() << "// PROD: " << i << ", ID: " << m_baseTrackProducers.at(i)->get("id");
}*/
if (track == -1 || (m_clipType != AUDIO && m_clipType != AV)) {
if (m_baseTrackProducers.count() == 0) return NULL;
int i;
for (i = 0; i < m_baseTrackProducers.count(); i++)
if (m_baseTrackProducers.at(i) != NULL) break;
if (i < m_baseTrackProducers.count()) return m_baseTrackProducers.at(i);
for (int i = 0; i < m_baseTrackProducers.count(); i++) {
if (m_baseTrackProducers.at(i) != NULL)
return m_baseTrackProducers.at(i);
}
return NULL;
}
if (track >= m_baseTrackProducers.count()) {
@@ -413,6 +440,10 @@ Mlt::Producer *DocClipBase::producer(int track) {
char *tmp = (char *) qstrdup(QString(getId() + '_' + QString::number(track)).toUtf8().data());
m_baseTrackProducers[track]->set("id", tmp);
delete[] tmp;
if (KdenliveSettings::dropbframes() && m_baseTrackProducers.at(i)->get("skip_loop_filter") && strcmp(m_baseTrackProducers.at(i)->get("skip_loop_filter"), "all") == 0) {
m_baseTrackProducers[track]->set("skip_loop_filter", "all");
m_baseTrackProducers[track]->set("skip_frame", "bidir");
}
}
return m_baseTrackProducers.at(track);
}
@@ -431,6 +462,16 @@ void DocClipBase::setProducerProperty(const char *name, const char *data) {
}
}
const char *DocClipBase::producerProperty(const char *name) const {
for (int i = 0; i < m_baseTrackProducers.count(); i++) {
if (m_baseTrackProducers.at(i) != NULL) {
return m_baseTrackProducers.at(i)->get(name);
}
}
return NULL;
}
void DocClipBase::slotRefreshProducer() {
if (m_baseTrackProducers.count() == 0) return;
kDebug() << "//////////// REFRESH CLIP !!!!!!!!!!!!!!!!";
@@ -513,14 +554,61 @@ void DocClipBase::setProperties(QMap <QString, QString> properties) {
if (refreshProducer) slotRefreshProducer();
}
void DocClipBase::setMetadata(QMap <QString, QString> properties) {
m_metadata = properties;
}
QMap <QString, QString> DocClipBase::metadata() const {
return m_metadata;
}
void DocClipBase::clearProperty(const QString &key) {
m_properties.remove(key);
}
void DocClipBase::getFileHash(const QString &url) {
if (m_clipType == SLIDESHOW) return;
QFile file(url);
if (file.open(QIODevice::ReadOnly)) { // write size and hash only if resource points to a file
QByteArray fileData;
QByteArray fileHash;
//kDebug() << "SETTING HASH of" << value;
m_properties.insert("file_size", QString::number(file.size()));
/*
* 1 MB = 1 second per 450 files (or faster)
* 10 MB = 9 seconds per 450 files (or faster)
*/
if (file.size() > 1000000*2) {
fileData = file.read(1000000);
if (file.seek(file.size() - 1000000))
fileData.append(file.readAll());
} else
fileData = file.readAll();
file.close();
fileHash = QCryptographicHash::hash(fileData, QCryptographicHash::Md5);
m_properties.insert("file_hash", QString(fileHash.toHex()));
//kDebug() << file.fileName() << file.size() << fileHash.toHex();
}
}
QString DocClipBase::getClipHash() const {
QString hash;
if (m_clipType == SLIDESHOW) hash = QCryptographicHash::hash(m_properties.value("resource").toAscii().data(), QCryptographicHash::Md5).toHex();
else if (m_clipType == COLOR) hash = QCryptographicHash::hash(m_properties.value("colour").toAscii().data(), QCryptographicHash::Md5).toHex();
else hash = m_properties.value("file_hash");
return hash;
}
void DocClipBase::refreshThumbUrl() {
if (m_thumbProd) m_thumbProd->updateThumbUrl(m_properties.value("file_hash"));
}
void DocClipBase::setProperty(const QString &key, const QString &value) {
m_properties.insert(key, value);
if (key == "resource") m_thumbProd->updateClipUrl(KUrl(value));
else if (key == "out") setDuration(GenTime(value.toInt(), KdenliveSettings::project_fps()));
if (key == "resource") {
getFileHash(value);
if (m_thumbProd) m_thumbProd->updateClipUrl(KUrl(value), m_properties.value("file_hash"));
} else if (key == "out") setDuration(GenTime(value.toInt(), KdenliveSettings::project_fps()));
//else if (key == "transparency") m_clipProducer->set("transparency", value.toInt());
else if (key == "colour") {
char *tmp = (char *) qstrdup(value.toUtf8().data());
@@ -557,6 +645,10 @@ QMap <QString, QString> DocClipBase::properties() const {
bool DocClipBase::slotGetAudioThumbs() {
if (m_thumbProd == NULL) return false;
if (!KdenliveSettings::audiothumbnails()) {
if (m_audioTimer != NULL) m_audioTimer->stop();
return false;
}
if (m_audioThumbCreated) {
if (m_audioTimer != NULL) m_audioTimer->stop();
return false;

View File

@@ -58,9 +58,6 @@ Q_OBJECT public:
// DocClipBase & operator=(const DocClipBase & clip);
virtual ~ DocClipBase();
/** sets the name of this clip. */
void setName(const QString name);
/** returns the name of this clip. */
const QString & name() const;
@@ -113,34 +110,11 @@ Q_OBJECT public:
void setProducer(Mlt::Producer *producer);
Mlt::Producer *producer(int track = -1);
/*virtual DocClipAVFile *toDocClipAVFile() {
return 0;
}
virtual DocClipTextFile *toDocClipTextFile() {
return 0;
}
virtual bool isDocClipTextFile() const {
return false;
}
virtual bool isDocClipVirtual() const {
return false;
}
virtual DocClipVirtual *toDocClipVirtual() {
return 0;
}*/
/** Returns true if this clip is a project clip, false otherwise. Overridden in DocClipProject,
* where it returns true. */
bool isProjectClip() const {
return false;
}
// Appends scene times for this clip to the passed vector.
/* virtual void populateSceneTimes(QList < GenTime >
&toPopulate) const = 0;*/
/** Reads in the element structure and creates a clip out of it.*/
// Returns an XML document that describes part of the current scene.
@@ -188,10 +162,19 @@ Q_OBJECT public:
/** Free cache data */
void slotClearAudioCache();
void askForAudioThumbs();
QString getClipHash() const;
void refreshThumbUrl();
const char *producerProperty(const char *name) const;
void setProducerProperty(const char *name, const char *data);
void deleteProducers();
/** Set default play zone for clip monitor */
void setZone(QPoint zone);
/** Get default play zone for clip monitor */
QPoint zone() const;
private: // Private attributes
/** The name of this clip */
QString m_name;
/** A description of this clip */
QString m_description;
/** The number of times this clip is used in the project - the number of references to this clip
@@ -216,11 +199,13 @@ private: // Private attributes
void setAudioThumbCreated(bool isDone);
/** Holds clip infos like fps, size,... */
QMap <QString, QString> m_properties;
/** Holds clip metadata like author, copyright,... */
QMap <QString, QString> m_metadata;
/** Create connections for audio thumbnails */
void slotCreateAudioTimer();
void slotRefreshProducer();
void setProducerProperty(const char *name, const char *data);
void setProducerProperty(const char *name, int data);
void getFileHash(const QString &url);
public slots:
void updateAudioThumbnail(QMap<int, QMap<int, QByteArray> > data);
@@ -238,7 +223,10 @@ public slots:
void setClipThumbFrame(const uint &ix);
uint getClipThumbFrame() const;
void setProperties(QMap <QString, QString> properties);
void setMetadata(QMap <QString, QString> properties);
QMap <QString, QString> properties() const;
QMap <QString, QString> metadata() const;
signals:
void getAudioThumbs();

433
src/dvdwizard.cpp Normal file
View File

@@ -0,0 +1,433 @@
/***************************************************************************
* Copyright (C) 2007 by Jean-Baptiste Mardelle (jb@kdenlive.org) *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
#include <QLabel>
#include <QFile>
#include <QXmlStreamWriter>
#include <QApplication>
#include <QTimer>
#include <QGraphicsView>
#include <QDomDocument>
#include <KStandardDirs>
#include <KLocale>
#include <KFileDialog>
#include <kmimetype.h>
#include <KIO/NetAccess>
#include <KMessageBox>
#include "kdenlivesettings.h"
#include "profilesdialog.h"
#include "dvdwizard.h"
DvdWizard::DvdWizard(const QString &url, const QString &profile, QWidget *parent): QWizard(parent), m_profile(profile) {
//setPixmap(QWizard::WatermarkPixmap, QPixmap(KStandardDirs::locate("appdata", "banner.png")));
setAttribute(Qt::WA_DeleteOnClose);
m_pageVob = new DvdWizardVob(this);
m_pageVob->setTitle(i18n("Select Files For Your DVD"));
addPage(m_pageVob);
if (!url.isEmpty()) m_pageVob->setUrl(url);
m_pageMenu = new DvdWizardMenu(m_profile, this);
m_pageMenu->setTitle(i18n("Create DVD Menu"));
addPage(m_pageMenu);
QWizardPage *page3 = new QWizardPage;
page3->setTitle(i18n("DVD Image"));
m_iso.setupUi(page3);
m_iso.tmp_folder->setPath(KdenliveSettings::currenttmpfolder());
m_iso.iso_image->setPath(QDir::homePath() + "/untitled.iso");
m_iso.iso_image->setFilter("*.iso");
m_iso.iso_image->fileDialog()->setOperationMode(KFileDialog::Saving);
addPage(page3);
QWizardPage *page4 = new QWizardPage;
page4->setTitle(i18n("Creating DVD Image"));
m_status.setupUi(page4);
addPage(page4);
connect(this, SIGNAL(currentIdChanged(int)), this, SLOT(slotPageChanged(int)));
// connect(m_standard.button_all, SIGNAL(toggled(bool)), this, SLOT(slotCheckStandard()));
}
DvdWizard::~DvdWizard() {
// m_menuFile.remove();
}
void DvdWizard::slotPageChanged(int page) {
kDebug() << "// PAGE CHGD: " << page;
if (page == 1) {
m_pageMenu->setTargets(m_pageVob->selectedUrls());
} else if (page == 2) {
m_pageMenu->buttonsInfo();
} else if (page == 3) {
// clear job icons
for (int i = 0; i < m_status.job_progress->count(); i++)
m_status.job_progress->item(i)->setIcon(KIcon());
QString warnMessage;
if (KIO::NetAccess::exists(KUrl(m_iso.tmp_folder->url().path() + "/DVD"), KIO::NetAccess::SourceSide, this))
warnMessage.append(i18n("Folder %1 already exists. Overwrite ?<br />", m_iso.tmp_folder->url().path() + "/DVD"));
if (KIO::NetAccess::exists(KUrl(m_iso.iso_image->url().path()), KIO::NetAccess::SourceSide, this))
warnMessage.append(i18n("Image file %1 already exists. Overwrite ?", m_iso.iso_image->url().path()));
if (!warnMessage.isEmpty() && KMessageBox::questionYesNo(this, warnMessage) == KMessageBox::No) {
back();
} else {
KIO::NetAccess::del(KUrl(m_iso.tmp_folder->url().path() + "/DVD"), this);
QTimer::singleShot(300, this, SLOT(generateDvd()));
}
}
}
void DvdWizard::generateDvd() {
KTemporaryFile temp1;
temp1.setSuffix(".png");
//temp1.setAutoRemove(false);
temp1.open();
KTemporaryFile temp2;
temp2.setSuffix(".png");
//temp2.setAutoRemove(false);
temp2.open();
KTemporaryFile temp3;
temp3.setSuffix(".png");
//temp3.setAutoRemove(false);
temp3.open();
KTemporaryFile temp4;
temp4.setSuffix(".png");
//temp4.setAutoRemove(false);
temp4.open();
KTemporaryFile temp5;
temp5.setSuffix(".vob");
//temp5.setAutoRemove(false);
temp5.open();
KTemporaryFile temp6;
temp6.setSuffix(".xml");
//temp6.setAutoRemove(false);
temp6.open();
m_menuFile.setSuffix(".mpg");
m_menuFile.setAutoRemove(false);
m_menuFile.open();
m_authorFile.setSuffix(".xml");
m_authorFile.setAutoRemove(false);
m_authorFile.open();
QListWidgetItem *images = m_status.job_progress->item(0);
images->setIcon(KIcon("system-run"));
qApp->processEvents();
QMap <int, QRect> buttons = m_pageMenu->buttonsInfo();
QStringList buttonsTarget;
if (m_pageMenu->createMenu()) {
m_pageMenu->createButtonImages(temp1.fileName(), temp2.fileName(), temp3.fileName());
m_pageMenu->createBackgroundImage(temp4.fileName());
images->setIcon(KIcon("dialog-ok"));
kDebug() << "/// STARTING MLT VOB CREATION";
if (!m_pageMenu->menuMovie()) {
// create menu vob file
QListWidgetItem *vobitem = m_status.job_progress->item(1);
vobitem->setIcon(KIcon("system-run"));
qApp->processEvents();
QStringList args;
args.append("-profile");
if (m_pageMenu->isPalMenu()) args.append("dv_pal");
else args.append("dv_ntsc");
args.append(temp4.fileName());
args.append("in=0");
args.append("out=100");
args << "-consumer" << "avformat:" + temp5.fileName();
if (m_pageMenu->isPalMenu()) {
args << "f=dvd" << "vcodec=mpeg2video" << "acodec=ac3" << "b=5000k" << "maxrate=8000k" << "minrate=0" << "bufsize=1835008" << "mux_packet_s=2048" << "mux_rate=10080000" << "ab=192k" << "ar=48000" << "s=720x576" << "g=15" << "me_range=63" << "trellis=1" << "profile=dv_pal";
} else {
args << "f=dvd" << "vcodec=mpeg2video" << "acodec=ac3" << "b=6000k" << "maxrate=9000k" << "minrate=0" << "bufsize=1835008" << "mux_packet_s=2048" << "mux_rate=10080000" << "ab=192k" << "ar=48000" << "s=720x480" << "g=18" << "me_range=63" << "trellis=1" << "profile=dv_ntsc";
}
kDebug() << "MLT ARGS: " << args;
QProcess renderbg;
renderbg.start("inigo", args);
if (renderbg.waitForFinished()) {
if (renderbg.exitStatus() == QProcess::CrashExit) {
kDebug() << "/// RENDERING MENU vob crashed";
vobitem->setIcon(KIcon("dialog-close"));
return;
}
} else {
kDebug() << "/// RENDERING MENU vob timed out";
vobitem->setIcon(KIcon("dialog-close"));
return;
}
vobitem->setIcon(KIcon("dialog-ok"));
}
kDebug() << "/// STARTING SPUMUX";
// create xml spumux file
QListWidgetItem *spuitem = m_status.job_progress->item(2);
spuitem->setIcon(KIcon("system-run"));
qApp->processEvents();
QDomDocument doc;
QDomElement sub = doc.createElement("subpictures");
doc.appendChild(sub);
QDomElement stream = doc.createElement("stream");
sub.appendChild(stream);
QDomElement spu = doc.createElement("spu");
stream.appendChild(spu);
spu.setAttribute("force", "yes");
spu.setAttribute("start", "00:00:00.00");
spu.setAttribute("image", temp1.fileName());
spu.setAttribute("select", temp2.fileName());
spu.setAttribute("highlight", temp3.fileName());
/*spu.setAttribute("autooutline", "infer");
spu.setAttribute("outlinewidth", "12");
spu.setAttribute("autoorder", "rows");*/
int max = buttons.count() - 1;
int i = 0;
QMapIterator<int, QRect> it(buttons);
while (it.hasNext()) {
it.next();
QDomElement but = doc.createElement("button");
but.setAttribute("name", "b" + QString::number(i));
if (i < max) but.setAttribute("down", "b" + QString::number(i + 1));
else but.setAttribute("down", "b0");
if (i > 0) but.setAttribute("up", "b" + QString::number(i - 1));
else but.setAttribute("up", "b" + QString::number(max));
QRect r = it.value();
int target = it.key();
// TODO: solve play all button
if (target == 0) target = 1;
buttonsTarget.append(QString::number(target));
but.setAttribute("x0", QString::number(r.x()));
but.setAttribute("y0", QString::number(r.y()));
but.setAttribute("x1", QString::number(r.right()));
but.setAttribute("y1", QString::number(r.bottom()));
spu.appendChild(but);
i++;
}
kDebug() << "///// SPU: ";
kDebug() << doc.toString();
QFile data(temp6.fileName());
if (data.open(QFile::WriteOnly)) {
QTextStream out(&data);
out << doc.toString();
}
data.close();
kDebug() << " SPUMUX DATA: " << doc.toString();
QStringList args;
args.append(temp6.fileName());
kDebug() << "SPM ARGS: " << args << temp5.fileName() << m_menuFile.fileName();
QProcess spumux;
if (m_pageMenu->menuMovie()) spumux.setStandardInputFile(m_pageMenu->menuMoviePath());
else spumux.setStandardInputFile(temp5.fileName());
spumux.setStandardOutputFile(m_menuFile.fileName());
spumux.start("spumux", args);
spumux.setProcessChannelMode(QProcess::MergedChannels);
if (spumux.waitForFinished()) {
kDebug() << QString(spumux.readAll()).simplified();
if (spumux.exitStatus() == QProcess::CrashExit) {
kDebug() << "/// RENDERING SPUMUX MENU crashed";
spuitem->setIcon(KIcon("dialog-close"));
return;
}
} else {
kDebug() << "/// RENDERING SPUMUX MENU timed out";
spuitem->setIcon(KIcon("dialog-close"));
return;
}
spuitem->setIcon(KIcon("dialog-ok"));
kDebug() << "/// DONE: " << m_menuFile.fileName();
}
// create dvdauthor xml
QListWidgetItem *authitem = m_status.job_progress->item(3);
authitem->setIcon(KIcon("system-run"));
qApp->processEvents();
KIO::NetAccess::mkdir(KUrl(m_iso.tmp_folder->url().path() + "/DVD"), this);
QDomDocument dvddoc;
QDomElement auth = dvddoc.createElement("dvdauthor");
auth.setAttribute("dest", m_iso.tmp_folder->url().path() + "/DVD");
dvddoc.appendChild(auth);
QDomElement vmgm = dvddoc.createElement("vmgm");
auth.appendChild(vmgm);
if (m_pageMenu->createMenu() && !m_pageVob->introMovie().isEmpty()) {
// intro movie
QDomElement menus = dvddoc.createElement("menus");
vmgm.appendChild(menus);
QDomElement pgc = dvddoc.createElement("pgc");
pgc.setAttribute("entry", "title");
menus.appendChild(pgc);
QDomElement menuvob = dvddoc.createElement("vob");
menuvob.setAttribute("file", m_pageVob->introMovie());
pgc.appendChild(menuvob);
QDomElement post = dvddoc.createElement("post");
QDomText call = dvddoc.createTextNode("jump titleset 1 menu;");
post.appendChild(call);
pgc.appendChild(post);
}
QDomElement titleset = dvddoc.createElement("titleset");
auth.appendChild(titleset);
if (m_pageMenu->createMenu()) {
// DVD main menu
QDomElement menus = dvddoc.createElement("menus");
titleset.appendChild(menus);
QDomElement pgc = dvddoc.createElement("pgc");
pgc.setAttribute("entry", "root");
menus.appendChild(pgc);
for (int i = 0; i < buttons.count(); i++) {
QDomElement button = dvddoc.createElement("button");
button.setAttribute("name", "b" + QString::number(i));
QDomText nametext = dvddoc.createTextNode("jump title " + buttonsTarget.at(i) + ";");
button.appendChild(nametext);
pgc.appendChild(button);
}
QDomElement menuvob = dvddoc.createElement("vob");
menuvob.setAttribute("file", m_menuFile.fileName());
menuvob.setAttribute("pause", "inf");
pgc.appendChild(menuvob);
}
QDomElement titles = dvddoc.createElement("titles");
titleset.appendChild(titles);
QStringList voburls = m_pageVob->selectedUrls();
QDomElement pgc2 = dvddoc.createElement("pgc");
titles.appendChild(pgc2);
if (m_pageMenu->createMenu()) {
QDomElement post = dvddoc.createElement("post");
QDomText call = dvddoc.createTextNode("call menu;");
post.appendChild(call);
pgc2.appendChild(post);
}
for (int i = 0; i < voburls.count(); i++) {
if (!voburls.at(i).isEmpty()) {
// Add vob entry
QDomElement vob = dvddoc.createElement("vob");
vob.setAttribute("file", voburls.at(i));
pgc2.appendChild(vob);
}
}
/*
// create one pgc for each video
for (int i = 0; i < voburls.count(); i++) {
if (!voburls.at(i).isEmpty()) {
// Add vob entry
QDomElement pgc2 = dvddoc.createElement("pgc");
titles.appendChild(pgc2);
if (m_pageMenu->createMenu()) {
QDomElement post = dvddoc.createElement("post");
QDomText call = dvddoc.createTextNode("call vmgm menu 1;");
post.appendChild(call);
pgc2.appendChild(post);
}
QDomElement vob = dvddoc.createElement("vob");
vob.setAttribute("file", voburls.at(i));
pgc2.appendChild(vob);
}
}
*/
QFile data2(m_authorFile.fileName());
if (data2.open(QFile::WriteOnly)) {
QTextStream out(&data2);
out << dvddoc.toString();
}
data2.close();
QStringList args;
args << "-x" << m_authorFile.fileName();
kDebug() << "// DVDAUTH ARGS: " << args;
QProcess *dvdauth = new QProcess(this);
connect(dvdauth, SIGNAL(finished(int , QProcess::ExitStatus)), this, SLOT(slotRenderFinished(int, QProcess::ExitStatus)));
dvdauth->setProcessChannelMode(QProcess::MergedChannels);
dvdauth->start("dvdauthor", args);
}
void DvdWizard::slotRenderFinished(int exitCode, QProcess::ExitStatus status) {
QListWidgetItem *authitem = m_status.job_progress->item(3);
if (status == QProcess::CrashExit) {
kDebug() << "DVDAuthor process crashed";
authitem->setIcon(KIcon("dialog-close"));
return;
}
authitem->setIcon(KIcon("dialog-ok"));
qApp->processEvents();
QStringList args;
args << "-dvd-video" << "-v" << "-o" << m_iso.iso_image->url().path() << m_iso.tmp_folder->url().path() + "/DVD";
QProcess *mkiso = new QProcess(this);
connect(mkiso, SIGNAL(finished(int , QProcess::ExitStatus)), this, SLOT(slotIsoFinished(int, QProcess::ExitStatus)));
mkiso->setProcessChannelMode(QProcess::MergedChannels);
QListWidgetItem *isoitem = m_status.job_progress->item(4);
isoitem->setIcon(KIcon("system-run"));
mkiso->start("mkisofs", args);
}
void DvdWizard::slotIsoFinished(int exitCode, QProcess::ExitStatus status) {
QListWidgetItem *isoitem = m_status.job_progress->item(4);
if (status == QProcess::CrashExit) {
m_authorFile.remove();
m_menuFile.remove();
KIO::NetAccess::del(KUrl(m_iso.tmp_folder->url().path() + "/DVD"), this);
kDebug() << "Iso process crashed";
isoitem->setIcon(KIcon("dialog-close"));
return;
}
isoitem->setIcon(KIcon("dialog-ok"));
kDebug() << "ISO IMAGE " << m_iso.iso_image->url().path() << " Successfully created";
m_authorFile.remove();
m_menuFile.remove();
KIO::NetAccess::del(KUrl(m_iso.tmp_folder->url().path() + "/DVD"), this);
KMessageBox::information(this, i18n("DVD iso image %1 successfully created.", m_iso.iso_image->url().path()));
}

62
src/dvdwizard.h Normal file
View File

@@ -0,0 +1,62 @@
/***************************************************************************
* Copyright (C) 2008 by Jean-Baptiste Mardelle (jb@kdenlive.org) *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
#ifndef DVDWIZARD_H
#define DVDWIZARD_H
#include <QWizard>
#include <QVBoxLayout>
#include <QItemDelegate>
#include <QPainter>
#include <QProcess>
#include <KDebug>
#include <KTemporaryFile>
#include "dvdwizardvob.h"
#include "dvdwizardmenu.h"
#include "ui_dvdwizardiso_ui.h"
#include "ui_dvdwizardstatus_ui.h"
class DvdWizard : public QWizard {
Q_OBJECT
public:
DvdWizard(const QString &url = QString(), const QString &profile = "dv_pal", QWidget * parent = 0);
virtual ~DvdWizard();
private:
DvdWizardVob *m_pageVob;
DvdWizardMenu *m_pageMenu;
Ui::DvdWizardIso_UI m_iso;
Ui::DvdWizardStatus_UI m_status;
QString m_profile;
KTemporaryFile m_menuFile;
KTemporaryFile m_authorFile;
private slots:
void slotPageChanged(int page);
void slotRenderFinished(int exitCode, QProcess::ExitStatus status);
void slotIsoFinished(int exitCode, QProcess::ExitStatus status);
void generateDvd();
};
#endif

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