Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
kdenlive
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Farid Abdelnour
kdenlive
Commits
b011271c
Commit
b011271c
authored
Dec 19, 2014
by
Vincent PINON
Browse files
Options
Browse Files
Download
Plain Diff
merge master branch into frmaworks branch
parents
44583e08
2c803010
Changes
22
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
551 additions
and
298 deletions
+551
-298
data/XmlMessages.sh
data/XmlMessages.sh
+22
-0
data/kdenlive.xml
data/kdenlive.xml
+22
-0
src/capture/mltdevicecapture.cpp
src/capture/mltdevicecapture.cpp
+5
-14
src/capture/mltdevicecapture.h
src/capture/mltdevicecapture.h
+7
-1
src/dialogs/kdenlivesettingsdialog.cpp
src/dialogs/kdenlivesettingsdialog.cpp
+1
-0
src/dialogs/renderwidget.cpp
src/dialogs/renderwidget.cpp
+1
-1
src/doc/documentchecker.h
src/doc/documentchecker.h
+7
-0
src/doc/kdenlivedoc.h
src/doc/kdenlivedoc.h
+18
-4
src/kdenlivesettings.kcfg
src/kdenlivesettings.kcfg
+5
-0
src/mainwindow.cpp
src/mainwindow.cpp
+41
-1
src/mainwindow.h
src/mainwindow.h
+5
-0
src/monitor/monitor.cpp
src/monitor/monitor.cpp
+10
-0
src/monitor/monitor.h
src/monitor/monitor.h
+3
-0
src/monitor/recmonitor.cpp
src/monitor/recmonitor.cpp
+13
-8
src/monitor/recmonitor.h
src/monitor/recmonitor.h
+13
-2
src/project/jobs/meltjob.cpp
src/project/jobs/meltjob.cpp
+3
-1
src/project/jobs/proxyclipjob.cpp
src/project/jobs/proxyclipjob.cpp
+1
-1
src/renderer.cpp
src/renderer.cpp
+4
-4
src/timeline/customtrackview.cpp
src/timeline/customtrackview.cpp
+307
-251
src/timeline/customtrackview.h
src/timeline/customtrackview.h
+10
-1
src/titler/titlewidget.h
src/titler/titlewidget.h
+7
-3
src/ui/configenv_ui.ui
src/ui/configenv_ui.ui
+46
-6
No files found.
data/XmlMessages.sh
0 → 100755
View file @
b011271c
function
get_files
{
echo
kdenlive.xml
}
function
po_for_file
{
case
"
$1
"
in
kdenlive.xml
)
echo
kdenlive_xml_mimetypes.po
;;
esac
}
function
tags_for_file
{
case
"
$1
"
in
kdenlive.xml
)
echo
comment
;;
esac
}
data/kdenlive.xml
View file @
b011271c
...
...
@@ -2,11 +2,33 @@
<mime-info
xmlns=
"http://www.freedesktop.org/standards/shared-mime-info"
>
<mime-type
type=
"application/x-kdenlive"
>
<comment>
Kdenlive video project document
</comment>
<comment
xml:lang=
"ca"
>
document de projecte de vídeo del Kdenlive
</comment>
<comment
xml:lang=
"cs"
>
Dokument video projektu Kdenlive
</comment>
<comment
xml:lang=
"de"
>
Kdenlive-Videoprojektdokument
</comment>
<comment
xml:lang=
"en_GB"
>
Kdenlive video project document
</comment>
<comment
xml:lang=
"nl"
>
Video projectdocument van Kdenlive
</comment>
<comment
xml:lang=
"pl"
>
Dokument projektowy filmu w Kdenlive
</comment>
<comment
xml:lang=
"pt"
>
Documento de projecto de vídeo do Kdenlive
</comment>
<comment
xml:lang=
"pt_BR"
>
Documento de projeto de vídeo do Kdenlive
</comment>
<comment
xml:lang=
"sk"
>
Dokument projektu videa Kdenlive
</comment>
<comment
xml:lang=
"sl"
>
Dokument video projekta Kdenlive
</comment>
<comment
xml:lang=
"uk"
>
документ відеопроекту Kdenlive
</comment>
<sub-class-of
type=
"video/mlt-playlist"
/>
<glob
pattern=
"*.kdenlive"
/>
</mime-type>
<mime-type
type=
"application/x-kdenlivetitle"
>
<comment>
Kdenlive video title
</comment>
<comment
xml:lang=
"ca"
>
títol de vídeo del Kdenlive
</comment>
<comment
xml:lang=
"cs"
>
Název videa Kdenlive
</comment>
<comment
xml:lang=
"de"
>
Kdenlive-Videotitel
</comment>
<comment
xml:lang=
"en_GB"
>
Kdenlive video title
</comment>
<comment
xml:lang=
"nl"
>
Titel van Kdenlive-video
</comment>
<comment
xml:lang=
"pl"
>
Tytuł filmu w Kdenlive
</comment>
<comment
xml:lang=
"pt"
>
Título de vídeo do Kdenlive
</comment>
<comment
xml:lang=
"pt_BR"
>
Título de vídeo do Kdenlive
</comment>
<comment
xml:lang=
"sk"
>
Titulok videa Kdenlive
</comment>
<comment
xml:lang=
"sl"
>
Naslov videa Kdenlive
</comment>
<comment
xml:lang=
"uk"
>
заголовок відео Kdenlive
</comment>
<sub-class-of
type=
"application/xml"
/>
<glob
pattern=
"*.kdenlivetitle"
/>
</mime-type>
...
...
src/capture/mltdevicecapture.cpp
View file @
b011271c
...
...
@@ -15,7 +15,6 @@
* *
***************************************************************************/
#include "mltdevicecapture.h"
#include "kdenlivesettings.h"
...
...
@@ -173,7 +172,7 @@ void MltDeviceCapture::stop()
if
(
m_mltConsumer
)
{
m_mltConsumer
->
set
(
"refresh"
,
0
);
m_mltConsumer
->
purge
();
m_mltConsumer
->
stop
();
m_mltConsumer
->
stop
();
//if (!m_mltConsumer->is_stopped()) m_mltConsumer->stop();
}
if
(
m_mltProducer
)
{
...
...
@@ -363,14 +362,6 @@ bool MltDeviceCapture::slotStartCapture(const QString ¶ms, const QString &pa
char
*
tmp
=
qstrdup
(
m_activeProfile
.
toUtf8
().
constData
());
m_mltProfile
=
new
Mlt
::
Profile
(
tmp
);
delete
[]
tmp
;
//m_mltProfile->get_profile()->is_explicit = 1;
/*//qDebug()<<"-- CREATING CAP: "<<params<<", PATH: "<<path;
tmp = qstrdup(QString("avformat:" + path).toUtf8().constData());
m_mltConsumer = new Mlt::Consumer(*m_mltProfile, tmp);
m_mltConsumer->set("real_time", -1);
delete[] tmp;*/
m_mltConsumer
=
new
Mlt
::
Consumer
(
*
m_mltProfile
,
"multi"
);
if
(
m_mltConsumer
==
NULL
||
!
m_mltConsumer
->
is_valid
())
{
...
...
@@ -387,11 +378,11 @@ bool MltDeviceCapture::slotStartCapture(const QString ¶ms, const QString &pa
Mlt
::
Properties
*
renderProps
=
new
Mlt
::
Properties
;
renderProps
->
set
(
"mlt_service"
,
"avformat"
);
renderProps
->
set
(
"target"
,
path
.
toUtf8
().
constData
());
renderProps
->
set
(
"real_time"
,
-
1
);
//renderProps->set("terminate_on_pause", 0);
renderProps
->
set
(
"real_time"
,
-
KdenliveSettings
::
mltthreads
());
renderProps
->
set
(
"terminate_on_pause"
,
0
);
// was commented out. restoring it fixes mantis#3415 - FFmpeg recording freezes
// without this line a call to mlt_properties_get_int(terminate on pause) for in mlt/src/modules/core/consumer_multi.c is returning 1
// and going into and endless loop.
renderProps
->
set
(
"mlt_profile"
,
m_activeProfile
.
toUtf8
().
constData
());
QStringList
paramList
=
params
.
split
(
' '
,
QString
::
SkipEmptyParts
);
for
(
int
i
=
0
;
i
<
paramList
.
count
();
++
i
)
{
tmp
=
qstrdup
(
paramList
.
at
(
i
).
section
(
'='
,
0
,
0
).
toUtf8
().
constData
());
...
...
src/capture/mltdevicecapture.h
View file @
b011271c
...
...
@@ -15,11 +15,16 @@
* *
***************************************************************************/
/*
*
/*
!
* @class MltDeviceCapture
* @brief Interface for MLT capture.
* Capturing started by MltDeviceCapture::slotStartCapture ()
*
* Capturing is stopped by RecMonitor::slotStopCapture()
*/
#ifndef MLTDEVICECAPTURE_H
#define MLTDEVICECAPTURE_H
...
...
@@ -71,6 +76,7 @@ Q_OBJECT public:
/** @brief Starts the MLT Video4Linux process.
* @param surface The widget onto which the frame should be painted
* Called by RecMonitor::slotRecord ()
*/
bool
slotStartCapture
(
const
QString
&
params
,
const
QString
&
path
,
const
QString
&
playlist
,
bool
livePreview
,
bool
xmlPlaylist
=
true
);
bool
slotStartPreview
(
const
QString
&
producer
,
bool
xmlFormat
=
false
);
...
...
src/dialogs/kdenlivesettingsdialog.cpp
View file @
b011271c
...
...
@@ -86,6 +86,7 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(const QMap<QString, QString>& map
m_configEnv
.
rendererpathurl
->
lineEdit
()
->
setObjectName
(
"kcfg_rendererpath"
);
m_configEnv
.
ffmpegurl
->
lineEdit
()
->
setObjectName
(
"kcfg_ffmpegpath"
);
m_configEnv
.
ffplayurl
->
lineEdit
()
->
setObjectName
(
"kcfg_ffplaypath"
);
m_configEnv
.
kcfg_mltthreads
->
setMaximum
(
QThread
::
idealThreadCount
()
<
4
?
QThread
::
idealThreadCount
()
:
3
);
m_configEnv
.
tmppathurl
->
setMode
(
KFile
::
Directory
);
m_configEnv
.
tmppathurl
->
lineEdit
()
->
setObjectName
(
"kcfg_currenttmpfolder"
);
m_configEnv
.
projecturl
->
setMode
(
KFile
::
Directory
);
...
...
src/dialogs/renderwidget.cpp
View file @
b011271c
...
...
@@ -1029,7 +1029,7 @@ void RenderWidget::slotExport(bool scriptExport, int zoneIn, int zoneOut, const
if
(
!
renderArgs
.
contains
(
"threads="
))
{
renderArgs
.
append
(
QString
(
" threads=%1"
).
arg
(
KdenliveSettings
::
encodethreads
()));
}
renderArgs
.
append
(
QString
(
" real_time=-
1"
));
renderArgs
.
append
(
QString
(
" real_time=-
%1"
).
arg
(
KdenliveSettings
::
mltthreads
()
));
// Check if the rendering profile is different from project profile,
// in which case we need to use the producer_comsumer from MLT
...
...
src/doc/documentchecker.h
View file @
b011271c
...
...
@@ -35,6 +35,13 @@ class DocumentChecker: public QObject
public:
explicit
DocumentChecker
(
const
QDomNodeList
&
infoproducers
,
const
QDomDocument
&
doc
);
~
DocumentChecker
();
/**
* @brief checks for problems with the clips in the project
* Checks for missing proxies, wrong duration clips, missing fonts, missing images, missing source clips
* Calls DocumentChecker::checkMissingImagesAndFonts () /n
* Called by KdenliveDoc::checkDocumentClips () /n
* @return
*/
bool
hasErrorInClips
();
private
slots
:
...
...
src/doc/kdenlivedoc.h
View file @
b011271c
...
...
@@ -16,10 +16,11 @@
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
/*! \class KdenliveDoc
\brief Represents a kdenlive project file
Instances of KdeliveDoc classes are created by void MainWindow::newFile(bool showProjectSettings, bool force)
\brief Represents a kdenlive project file
Instances of KdeliveDoc classes are created by void MainWindow::newFile(bool showProjectSettings, bool force)
*/
#ifndef KDENLIVEDOC_H
#define KDENLIVEDOC_H
...
...
@@ -199,6 +200,12 @@ private:
void
setNewClipResource
(
const
QString
&
id
,
const
QString
&
path
);
QString
searchFileRecursively
(
const
QDir
&
dir
,
const
QString
&
matchSize
,
const
QString
&
matchHash
)
const
;
void
moveProjectData
(
const
QUrl
&
url
);
/**
* @brief check for issues with the clips in the project
* Instansiates DocumentChecker objects to do this task.
* @param infoproducers
* @return
*/
bool
checkDocumentClips
(
QDomNodeList
infoproducers
);
/** @brief Creates a new project. */
...
...
@@ -217,6 +224,13 @@ public slots:
void
slotCreateXmlClip
(
const
QString
&
name
,
const
QDomElement
&
xml
,
const
QString
&
group
,
const
QString
&
groupId
);
void
slotCreateColorClip
(
const
QString
&
name
,
const
QString
&
color
,
const
QString
&
duration
,
const
QString
&
group
,
const
QString
&
groupId
);
void
slotCreateSlideshowClipFile
(
const
QMap
<
QString
,
QString
>
&
properties
,
const
QString
&
group
,
const
QString
&
groupId
);
/**
* @brief Create a title clip.
* Instansiates TitleWidget objects
* @param group
* @param groupId
* @param templatePath
*/
void
slotCreateTextClip
(
QString
group
,
const
QString
&
groupId
,
const
QString
&
templatePath
=
QString
());
void
slotCreateTextTemplateClip
(
const
QString
&
group
,
const
QString
&
groupId
,
QUrl
path
);
...
...
@@ -230,7 +244,7 @@ public slots:
private
slots
:
/** @brief Saves the current project at the autosave location.
*
@description The autosave files are in ~/.kde/data/stalefiles/kdenlive/ */
* @description The autosave files are in ~/.kde/data/stalefiles/kdenlive/ */
void
slotAutoSave
();
signals:
...
...
src/kdenlivesettings.kcfg
View file @
b011271c
...
...
@@ -272,6 +272,11 @@
<label>
FFplay / avplay binary path.
</label>
<default></default>
</entry>
<entry
name=
"mltthreads"
type=
"Int"
>
<label>
Mlt processing thread count.
</label>
<default>
1
</default>
</entry>
<entry
name=
"proxythreads"
type=
"Int"
>
<label>
Proxy creation processing thread count.
</label>
...
...
src/mainwindow.cpp
View file @
b011271c
...
...
@@ -642,7 +642,7 @@ void MainWindow::slotConnectMonitors()
connect
(
m_projectMonitor
->
render
,
SIGNAL
(
replyGetImage
(
QString
,
QString
,
int
,
int
)),
m_projectList
,
SLOT
(
slotReplyGetImage
(
QString
,
QString
,
int
,
int
)));
connect
(
m_projectMonitor
->
render
,
SIGNAL
(
replyGetImage
(
QString
,
QImage
)),
m_projectList
,
SLOT
(
slotReplyGetImage
(
QString
,
QImage
)));
connect
(
m_projectMonitor
->
render
,
SIGNAL
(
replyGetFileProperties
(
QString
,
Mlt
::
Producer
*
,
stringMap
,
stringMap
,
bool
)),
m_projectList
,
SLOT
(
slotReplyGetFileProperties
(
QString
,
Mlt
::
Producer
*
,
stringMap
,
stringMap
,
bool
))
,
Qt
::
DirectConnection
);
connect
(
m_projectMonitor
->
render
,
SIGNAL
(
replyGetFileProperties
(
QString
,
Mlt
::
Producer
*
,
stringMap
,
stringMap
,
bool
)),
m_projectList
,
SLOT
(
slotReplyGetFileProperties
(
QString
,
Mlt
::
Producer
*
,
stringMap
,
stringMap
,
bool
)));
connect
(
m_projectMonitor
->
render
,
SIGNAL
(
removeInvalidClip
(
QString
,
bool
)),
m_projectList
,
SLOT
(
slotRemoveInvalidClip
(
QString
,
bool
)));
...
...
@@ -1145,6 +1145,7 @@ void MainWindow::setupActions()
connect
(
proxyClip
,
SIGNAL
(
toggled
(
bool
)),
m_projectList
,
SLOT
(
slotProxyCurrentItem
(
bool
)));
addAction
(
"stopmotion"
,
i18n
(
"Stop Motion Capture"
),
this
,
SLOT
(
slotOpenStopmotion
()),
QIcon
::
fromTheme
(
"image-x-generic"
));
addAction
(
"ripple_delete"
,
i18n
(
"Ripple Delete"
),
this
,
SLOT
(
slotRippleDelete
()),
QIcon
(),
Qt
::
CTRL
+
Qt
::
Key_X
);
addClips
->
addAction
(
reloadClip
);
addClips
->
addAction
(
proxyClip
);
...
...
@@ -1921,6 +1922,45 @@ void MainWindow::slotRemoveSpace()
pCore
->
projectManager
()
->
currentTrackView
()
->
projectView
()
->
slotRemoveSpace
();
}
void
MainWindow
::
slotRippleDelete
()
{
if
(
!
m_projectMonitor
->
isActive
()
||
!
pCore
->
projectManager
()
->
currentTrackView
())
return
;
int
zoneStart
=
m_projectMonitor
->
getZoneStart
();
int
zoneEnd
=
m_projectMonitor
->
getZoneEnd
();
if
(
!
zoneStart
&&
zoneEnd
==
(
pCore
->
projectManager
()
->
currentTrackView
()
->
duration
()
-
1
))
return
;
int
zoneFrameCount
=
zoneEnd
-
zoneStart
;
m_projectMonitor
->
slotZoneStart
();
pCore
->
projectManager
()
->
currentTrackView
()
->
projectView
()
->
setCursorPos
(
zoneStart
);
pCore
->
projectManager
()
->
currentTrackView
()
->
projectView
()
->
slotSelectAllClips
();
pCore
->
projectManager
()
->
currentTrackView
()
->
projectView
()
->
cutSelectedClips
();
pCore
->
projectManager
()
->
currentTrackView
()
->
projectView
()
->
resetSelectionGroup
(
false
);
m_projectMonitor
->
slotZoneEnd
();
pCore
->
projectManager
()
->
currentTrackView
()
->
projectView
()
->
setCursorPos
(
zoneEnd
);
zoneEnd
++
;
pCore
->
projectManager
()
->
currentTrackView
()
->
projectView
()
->
selectItemsRightOfFrame
(
zoneEnd
);
pCore
->
projectManager
()
->
currentTrackView
()
->
projectView
()
->
setInPoint
();
pCore
->
projectManager
()
->
currentTrackView
()
->
projectView
()
->
resetSelectionGroup
(
false
);
zoneEnd
++
;
pCore
->
projectManager
()
->
currentTrackView
()
->
projectView
()
->
selectItemsRightOfFrame
(
zoneEnd
);
pCore
->
projectManager
()
->
currentTrackView
()
->
projectView
()
->
spaceToolMoveToSnapPos
((
double
)
zoneEnd
);
pCore
->
projectManager
()
->
currentTrackView
()
->
projectView
()
->
spaceToolMoveToSnapPos
((
double
)
zoneStart
);
GenTime
timeOffset
=
GenTime
(
zoneFrameCount
*
-
1
,
pCore
->
projectManager
()
->
current
()
->
fps
());
pCore
->
projectManager
()
->
currentTrackView
()
->
projectView
()
->
completeSpaceOperation
(
-
1
,
timeOffset
);
m_projectMonitor
->
slotZoneStart
();
pCore
->
projectManager
()
->
currentTrackView
()
->
projectView
()
->
setCursorPos
(
zoneStart
);
pCore
->
projectManager
()
->
currentTrackView
()
->
projectView
()
->
resetSelectionGroup
(
false
);
return
;
}
void
MainWindow
::
slotInsertTrack
(
int
ix
)
{
pCore
->
monitorManager
()
->
activateMonitor
(
Kdenlive
::
ProjectMonitor
);
...
...
src/mainwindow.h
View file @
b011271c
...
...
@@ -286,6 +286,8 @@ private slots:
void
slotSwitchSnap
();
void
slotRenderProject
();
void
slotFullScreen
();
/** @brief if modified is true adds "modified" to the caption and enables the save button.
* (triggered by KdenliveDoc::setModified()) */
void
slotUpdateDocumentState
(
bool
modified
);
/** @brief Sets the timeline zoom slider to @param value.
...
...
@@ -446,6 +448,9 @@ private slots:
/** @brief Move playhead to mouse curser position if defined key is pressed */
void
slotAlignPlayheadToMousePos
();
// Ripple Edit
void
slotRippleDelete
();
signals:
Q_SCRIPTABLE
void
abortRenderJob
(
const
QString
&
url
);
void
configurationChanged
();
...
...
src/monitor/monitor.cpp
View file @
b011271c
...
...
@@ -678,6 +678,16 @@ void Monitor::slotEnd()
render
->
seekToFrame
(
render
->
getLength
());
}
int
Monitor
::
getZoneStart
()
{
return
m_ruler
->
zone
().
x
();
}
int
Monitor
::
getZoneEnd
()
{
return
m_ruler
->
zone
().
y
();
}
void
Monitor
::
slotZoneStart
()
{
slotActivateMonitor
();
...
...
src/monitor/monitor.h
View file @
b011271c
...
...
@@ -98,6 +98,9 @@ public:
/** @brief Get url for the clip's thumbnail */
QString
getMarkerThumb
(
GenTime
pos
);
int
getZoneStart
();
int
getZoneEnd
();
protected:
void
mousePressEvent
(
QMouseEvent
*
event
);
void
mouseReleaseEvent
(
QMouseEvent
*
event
);
...
...
src/monitor/recmonitor.cpp
View file @
b011271c
...
...
@@ -581,6 +581,11 @@ void RecMonitor::slotStartPreview(bool play)
void
RecMonitor
::
slotRecord
()
{
m_error
.
clear
();
video_frame
->
setText
(
i18n
(
""
));
// clear error text from previous run if any.
// ^^ This does clear the error text but the change is not visible straight way in the UI
// it only becomes visible after the capture is complete. Vincent and JBM - how come? What can
// we do to make the error text go way as soon as a new capture starts. It is missleading to the user
// to have the error still display while we are happily capturing.
if
(
m_captureProcess
->
state
()
==
QProcess
::
NotRunning
&&
device_selector
->
currentIndex
()
==
Firewire
)
{
slotStartPreview
();
}
...
...
@@ -636,7 +641,7 @@ void RecMonitor::slotRecord()
if
(
capturename
.
isEmpty
())
capturename
=
"capture"
;
switch
(
device_selector
->
currentIndex
())
{
case
Video4Linux
:
case
Video4Linux
:
//ffmpeg capture
if
(
rec_video
->
isChecked
())
slotActivateMonitor
();
path
=
QStandardPaths
::
writableLocation
(
QStandardPaths
::
DataLocation
)
+
"/profiles/video4linux"
;
profile
=
ProfilesDialog
::
getVideoProfile
(
path
);
...
...
@@ -686,19 +691,19 @@ void RecMonitor::slotRecord()
m_recAction
->
setEnabled
(
false
);
m_stopAction
->
setEnabled
(
true
);
m_previewSettings
->
setEnabled
(
false
);
control_frame
->
setEnabled
(
false
);
control_frame
->
setEnabled
(
false
);
}
else
{
video_frame
->
setText
(
i18n
(
"Failed to start
Video4Linux
,
\n
check your parameters..."
));
video_frame
->
setText
(
i18n
(
"Failed to start
ffmpeg capture
,
\n
check your parameters..."
));
videoBox
->
setHidden
(
true
);
m_recAction
->
blockSignals
(
true
);
m_recAction
->
setChecked
(
false
);
m_recAction
->
blockSignals
(
false
);
m_recAction
->
blockSignals
(
true
);
m_recAction
->
setChecked
(
false
);
m_recAction
->
blockSignals
(
false
);
m_isCapturing
=
false
;
}
break
;
case
BlackMagic
:
case
BlackMagic
:
// BlackMagic capture
slotActivateMonitor
();
path
=
KdenliveSettings
::
current_profile
();
profile
=
ProfilesDialog
::
getVideoProfile
(
path
);
...
...
@@ -722,7 +727,7 @@ void RecMonitor::slotRecord()
}
break
;
case
ScreenBag
:
case
ScreenBag
:
// screen grab capture
m_captureArgs
<<
"-f"
<<
"x11grab"
;
if
(
KdenliveSettings
::
grab_follow_mouse
())
m_captureArgs
<<
"-follow_mouse"
<<
"centered"
;
if
(
!
KdenliveSettings
::
grab_hide_frame
())
m_captureArgs
<<
"-show_region"
<<
"1"
;
...
...
src/monitor/recmonitor.h
View file @
b011271c
...
...
@@ -17,10 +17,12 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
/*
*
/*
!
* @class RecMonitor
* @brief Records video via dvgrab
, video4linux and recordmydesktop
* @brief Records video via dvgrab
(firewire), ffmpeg=video4linux and screen capture also via ffmpeg
* @author Jean-Baptiste Mardelle
* Recording is started by RecMonitor::slotRecord ()
* Recording stoped in RecMonitor::slotStopCapture ()
*/
#ifndef RECMONITOR_H
...
...
@@ -120,6 +122,12 @@ private:
private
slots
:
void
slotStartPreview
(
bool
play
=
true
);
/**
* @brief Starts recording from the Record Monitor tab.
* 4 different recording modes
* Firewire, ScreenBag (=Screen Grab), Video4Linux (=Ffmepg) and BlackMagic. \n
* calls MltDeviceCapture::slotStartCapture ()
*/
void
slotRecord
();
void
slotProcessStatus
(
QProcess
::
ProcessState
status
);
void
slotVideoDeviceChanged
(
int
ix
);
...
...
@@ -141,6 +149,9 @@ public slots:
void
slotPlay
();
void
stop
();
void
start
();
/**
* @brief Stops the RecMonitor capturing
*/
void
slotStopCapture
();
void
slotUpdateCaptureFolder
(
const
QString
&
currentProjectFolder
);
void
slotUpdateFullScreenGrab
();
...
...
src/project/jobs/meltjob.cpp
View file @
b011271c
...
...
@@ -56,6 +56,8 @@ MeltJob::MeltJob(ClipType cType, const QString &id, const QStringList ¶meter
void
MeltJob
::
setProducer
(
Mlt
::
Producer
*
producer
,
const
QUrl
&
url
)
{
Q_UNUSED
(
producer
)
//FIX stabilize in proxy clips?
//m_url = QString::fromUtf8(producer->get("resource"));
//if (m_url == QLatin1String("<playlist>") || m_url == QLatin1String("<tractor>") || m_url == QLatin1String("<producer>"))
...
...
@@ -143,7 +145,7 @@ void MeltJob::startJob()
//m_consumer->set("terminate_on_pause", 1 );
//m_consumer->set("eof", "pause" );
m_consumer
->
set
(
"real_time"
,
-
1
);
m_consumer
->
set
(
"real_time"
,
-
KdenliveSettings
::
mltthreads
()
);
list
=
consumerParams
.
split
(
QLatin1Char
(
' '
),
QString
::
SkipEmptyParts
);
...
...
src/project/jobs/proxyclipjob.cpp
View file @
b011271c
...
...
@@ -64,7 +64,7 @@ void ProxyJob::startJob()
mltParameters
<<
t
;
}
mltParameters
.
append
(
QString
::
fromLatin1
(
"real_time=-
1"
));
mltParameters
.
append
(
QString
::
fromLatin1
(
"real_time=-
%1"
).
arg
(
KdenliveSettings
::
mltthreads
()
));
//TODO: currently, when rendering an xml file through melt, the display ration is lost, so we enforce it manualy
double
display_ratio
;
...
...
src/renderer.cpp
View file @
b011271c
...
...
@@ -196,8 +196,8 @@ void Render::buildConsumer(const QString &profileName)
m_mltConsumer
->
set
(
"terminate_on_pause"
,
0
);
m_mltConsumer
->
set
(
"deinterlace_method"
,
KdenliveSettings
::
mltdeinterlacer
().
toUtf8
().
constData
());
m_mltConsumer
->
set
(
"rescale"
,
KdenliveSettings
::
mltinterpolation
().
toUtf8
().
constData
());
m_mltConsumer
->
set
(
"buffer"
,
"
5
"
);
m_mltConsumer
->
set
(
"real_time"
,
1
);
m_mltConsumer
->
set
(
"buffer"
,
"
1
"
);
m_mltConsumer
->
set
(
"real_time"
,
KdenliveSettings
::
mltthreads
()
);
}
if
(
m_mltConsumer
&&
m_mltConsumer
->
is_valid
())
{
return
;
...
...
@@ -277,7 +277,7 @@ void Render::buildConsumer(const QString &profileName)
m_mltConsumer
->
set
(
"audio_driver"
,
audioDriver
.
toUtf8
().
constData
());
m_mltConsumer
->
set
(
"frequency"
,
48000
);
m_mltConsumer
->
set
(
"real_time"
,
1
);
m_mltConsumer
->
set
(
"real_time"
,
KdenliveSettings
::
mltthreads
()
);
}
Mlt
::
Producer
*
Render
::
invalidProducer
(
const
QString
&
id
)
...
...
@@ -1647,7 +1647,7 @@ void Render::setDropFrames(bool show)
{
QMutexLocker
locker
(
&
m_mutex
);
if
(
m_mltConsumer
)
{
int
dropFrames
=
1
;
int
dropFrames
=
KdenliveSettings
::
mltthreads
()
;
if
(
show
==
false
)
dropFrames
=
-
dropFrames
;
m_mltConsumer
->
stop
();
m_mltConsumer
->
set
(
"real_time"
,
dropFrames
);
...
...
src/timeline/customtrackview.cpp
View file @
b011271c
This diff is collapsed.
Click to expand it.
src/timeline/customtrackview.h
View file @
b011271c
...
...
@@ -211,6 +211,16 @@ public:
/** @brief Get effect parameters ready for MLT*/
static
void
adjustEffectParameters
(
EffectsParameterList
&
parameters
,
QDomNodeList
params
,
MltVideoProfile
profile
,
const
QString
&
prefix
=
QString
());
void
completeSpaceOperation
(
int
track
,
GenTime
&
timeOffset
);
void
spaceToolMoveToSnapPos
(
double
snappedPos
);
void
createRectangleSelection
(
QMouseEvent
*
event
);
void
spaceToolSelect
(
QMouseEvent
*
event
);
int
spaceToolSelectTrackOnly
(
int
track
,
QList
<
QGraphicsItem
*>
&
selection
);
QList
<
QGraphicsItem
*>
selectAllItemsToTheRight
(
int
x
);
void
createGroupForSelectedItems
(
QList
<
QGraphicsItem
*>
&
selection
);
void
selectItemsRightOfFrame
(
int
frame
);
void
resetSelectionGroup
(
bool
selectItems
=
true
);
public
slots
:
/** @brief Send seek request to MLT. */
void
seekCursorPos
(
int
pos
);
...
...
@@ -405,7 +415,6 @@ private:
bool
canBeMoved
(
QList
<
AbstractClipItem
*>
items
,
GenTime
offset
,
int
trackOffset
)
const
;
ClipItem
*
getClipUnderCursor
()
const
;
AbstractClipItem
*
getMainActiveClip
()
const
;
void
resetSelectionGroup
(
bool
selectItems
=
true
);
void
groupSelectedItems
(
QList
<
QGraphicsItem
*>
selection
=
QList
<
QGraphicsItem
*>
(),
bool
createNewGroup
=
false
,
bool
selectNewGroup
=
false
);
/** Get available space for clip move (min and max free positions) */
void
getClipAvailableSpace
(
AbstractClipItem
*
item
,
GenTime
&
minimum
,
GenTime
&
maximum
);
...
...
src/titler/titlewidget.h
View file @
b011271c
...
...
@@ -50,7 +50,10 @@ public:
double
rotatex
,
rotatey
,
rotatez
;
};
/*! \class KdenliveDoc
\brief Represents a kdenlive project file
Instances of TitleWidget classes are instansiated by KdenliveDoc::slotCreateTextClip ()
*/
class
TitleWidget
:
public
QDialog
,
public
Ui
::
TitleWidget_UI
{
Q_OBJECT
...
...
@@ -73,9 +76,10 @@ public:
* @return list of the image files */
static
QStringList
extractImageList
(
const
QString
&
xml
);
/** @brief Checks for the fonts referenced by a title clip.
/** @brief Checks for the fonts referenced by a title clip.\n
* Called by DocumentChecker::hasErrorInClips () \n
* @param xml XML data representing the title
* @return list of the fonts */
* @return list of the fonts
in the title
*/
static
QStringList
extractFontList
(
const
QString
&
xml
);
/** @brief Returns clip duration. */
...
...
src/ui/configenv_ui.ui
View file @
b011271c
...
...
@@ -7,7 +7,7 @@
<x>
0
</x>
<y>
0
</y>
<width>
367
</width>
<height>
253
</height>
<height>
318
</height>
</rect>
</property>
<layout
class=
"QGridLayout"
name=
"gridLayout"
>
...
...
@@ -34,7 +34,7 @@
<string>
MLT environment
</string>
</attribute>
<layout
class=
"QGridLayout"
name=
"gridLayout_3"
>
<item
row=
"
4
"
column=
"1"
>
<item
row=
"
5
"
column=
"1"
>
<spacer
name=
"verticalSpacer_2"
>
<property
name=
"orientation"
>
<enum>
Qt::Vertical
</enum>
...
...
@@ -47,7 +47,7 @@
</property>
</spacer>
</item>
<item
row=
"3"
column=
"1"
colspan=
"
2
"
>
<item
row=
"3"
column=
"1"
colspan=
"
3
"
>
<widget
class=
"KUrlRequester"
name=
"rendererpathurl"
/>
</item>
<item
row=
"3"
column=
"0"
>
...
...
@@ -57,6 +57,33 @@
</property>
</widget>
</item>
<item
row=
"4"
column=
"3"
>
<widget
class=
"QLabel"
name=
"label_7"
>
<property
name=
"text"
>
<string>
(
>
1 is experimental)
</string>
</property>
</widget>
</item>
<item
row=
"4"
column=
"1"
colspan=
"2"
>
<widget
class=
"QSpinBox"
name=
"kcfg_mltthreads"
>
<property
name=
"sizePolicy"
>
<sizepolicy
hsizetype=
"Minimum"
vsizetype=
"Fixed"
>
<horstretch>
0
</horstretch>
<verstretch>
0
</verstretch>
</sizepolicy>
</property>
<property
name=
"minimum"
>
<number>
1
</number>
</property>
</widget>
</item>
<item
row=
"4"
column=
"0"
>
<widget
class=
"QLabel"
name=
"label_6"
>
<property
name=
"text"
>
<string>
Processing threads
</string>
</property>
</widget>
</item>
<item
row=
"0"
column=
"0"
>
<widget
class=
"QLabel"
name=
"label_8"
>
<property
name=
"text"
>
...
...
@@ -71,10 +98,10 @@
</property>
</widget>
</item>
<item
row=
"2"
column=
"1"
colspan=
"
2
"
>
<item
row=
"2"
column=
"1"
colspan=
"
3
"
>
<widget
class=
"KUrlRequester"
name=
"mltpathurl"
/>
</item>
<item
row=
"0"
column=
"1"
colspan=
"
2
"
>
<item
row=
"0"
column=
"1"
colspan=
"
3
"
>
<widget
class=
"KUrlRequester"
name=
"ffmpegurl"
/>
</item>
<item
row=
"1"
column=
"0"
>
...
...
@@ -84,7 +111,7 @@
</property>
</widget>
</item>
<item
row=
"1"
column=
"1"
colspan=
"
2
"
>
<item
row=
"1"
column=
"1"
colspan=
"
3
"
>
<widget
class=
"KUrlRequester"
name=
"ffplayurl"
/>
</item>
</layout>
...
...
@@ -231,6 +258,19 @@
</widget>
</widget>
</item>
<item
row=
"3"
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>