[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kdenlive] src: Fix opening old kdenlive project files with audio/video only clips
From: Jean-Baptiste Mardelle <jb () kdenlive ! org>
Date: 2015-09-30 18:36:49
Message-ID: E1ZhMFF-0004CW-BT () scm ! kde ! org
[Download RAW message or body]
Git commit 9c2d766b9d6b52ebf086d06af0803717edb50d1c by Jean-Baptiste Mardelle.
Committed on 30/09/2015 at 18:36.
Pushed by mardelle into branch 'master'.
Fix opening old kdenlive project files with audio/video only clips
M +31 -11 src/doc/documentvalidator.cpp
M +0 -1 src/timeline/clipitem.cpp
M +2 -2 src/timeline/customtrackview.cpp
M +1 -1 src/timeline/timeline.cpp
http://commits.kde.org/kdenlive/9c2d766b9d6b52ebf086d06af0803717edb50d1c
diff --git a/src/doc/documentvalidator.cpp b/src/doc/documentvalidator.cpp
index a0ecf58..bbfa254 100644
--- a/src/doc/documentvalidator.cpp
+++ b/src/doc/documentvalidator.cpp
@@ -1017,12 +1017,12 @@ bool DocumentValidator::upgrade(double version, const double currentVersion)
m_doc.firstChildElement("mlt").setAttribute("LC_NUMERIC", "C");
}
}
-
+
if (version <= 0.88) {
// convert to new MLT-only format
QDomNodeList producers = m_doc.elementsByTagName("producer");
QDomDocumentFragment frag = m_doc.createDocumentFragment();
-
+
// Create Bin Playlist
QDomElement main_playlist = m_doc.createElement("playlist");
QDomElement prop = m_doc.createElement("property");
@@ -1070,9 +1070,9 @@ bool DocumentValidator::upgrade(double version, const double currentVersion)
QStringList ids;
QStringList slowmotionIds;
QDomNode firstProd = m_doc.firstChildElement("producer");
-
+
QDomNodeList kdenlive_producers = m_doc.elementsByTagName("kdenlive_producer");
-
+
// Rename all track producers to correct name: "id_playlistName" instead of "id_trackNumber"
QMap <QString, QString> trackRenaming;
// Create a list of which producers / track on which the producer is
@@ -1081,22 +1081,36 @@ bool DocumentValidator::upgrade(double version, const double currentVersion)
for (int i = 0; i < entries.count(); i++) {
QDomElement entry = entries.at(i).toElement();
QString entryId = entry.attribute("producer");
- if (!entryId.contains("_")) {
- // not a track producer
- playlistForId.insert(entryId, entry.parentNode().toElement().attribute("id"));
- continue;
- }
+ bool audioOnlyProducer = false;
if (trackRenaming.contains(entryId)) {
// rename
entry.setAttribute("producer", trackRenaming.value(entryId));
continue;
}
+ if (entryId.endsWith("_video")) {
+ // Video only producers are not track aware
+ continue;
+ }
+ if (entryId.endsWith("_audio")) {
+ // Video only producers are not track aware
+ audioOnlyProducer = true;
+ entryId = entryId.section("_", 0, -2);
+ }
+ if (!entryId.contains("_")) {
+ // not a track producer
+ playlistForId.insert(entryId, entry.parentNode().toElement().attribute("id"));
+ continue;
+ }
QString track = entryId.section("_", 1, 1);
QString playlistId = entry.parentNode().toElement().attribute("id");
if (track == playlistId) continue;
QString newId = entryId.section("_", 0, 0) + "_" + playlistId;
+ if (audioOnlyProducer) {
+ newId.append("_audio");
+ trackRenaming.insert(entryId + "_audio", newId);
+ }
+ else trackRenaming.insert(entryId, newId);
entry.setAttribute("producer", newId);
- trackRenaming.insert(entryId, newId);
}
if (!trackRenaming.isEmpty()) {
@@ -1132,7 +1146,7 @@ bool DocumentValidator::upgrade(double version, const double currentVersion)
if (ids.contains(prodId)) {
// Make sure we didn't create a duplicate
if (ids.contains(id)) {
- // we have a duplicate, check if this needs to ba a track producer
+ // we have a duplicate, check if this needs to be a track producer
QString service = EffectsList::property(prod, "mlt_service");
int a_ix = EffectsList::property(prod, "audio_index").toInt();
if (service == "xml" || service == "consumer" || (service.contains("avformat") && \
a_ix != -1)) { @@ -1185,6 +1199,12 @@ bool DocumentValidator::upgrade(double version, const double \
currentVersion) else {
QDomElement originalProd = prod.cloneNode().toElement();
originalProd.setAttribute("id", prodId);
+ if (id.endsWith("_audio")) {
+ EffectsList::removeProperty(originalProd, "video_index");
+ }
+ else if (id.endsWith("_video")) {
+ EffectsList::removeProperty(originalProd, "audio_index");
+ }
frag.appendChild(originalProd);
QDomElement entry = m_doc.createElement("entry");
entry.setAttribute("in", prod.attribute("in"));
diff --git a/src/timeline/clipitem.cpp b/src/timeline/clipitem.cpp
index e39ba10..3489ba6 100644
--- a/src/timeline/clipitem.cpp
+++ b/src/timeline/clipitem.cpp
@@ -2045,6 +2045,5 @@ void ClipItem::updateState(const QString &id)
else {
m_clipState = PlaylistState::Original;
}
-
}
diff --git a/src/timeline/customtrackview.cpp b/src/timeline/customtrackview.cpp
index c7b0d37..0e19ea6 100644
--- a/src/timeline/customtrackview.cpp
+++ b/src/timeline/customtrackview.cpp
@@ -6757,7 +6757,7 @@ void CustomTrackView::doChangeClipType(const GenTime &pos, int track, PlaylistSt
{
ClipItem *clip = getClipItemAtStart(pos, track);
if (clip == NULL) {
- emit displayMessage(i18n("Cannot find clip to edit (time: %1, track: %2)", \
pos.frames(m_document->fps()), track), ErrorMessage); + emit displayMessage(i18n("Cannot find clip \
to edit (time: %1, track: %2)", pos.frames(m_document->fps()), \
m_timeline->getTrackInfo(track).trackName), ErrorMessage); return;
}
Mlt::Producer *prod;
@@ -6769,7 +6769,7 @@ void CustomTrackView::doChangeClipType(const GenTime &pos, int track, PlaylistSt
clip->setState(state);
} else {
// Changing clip type failed
- emit displayMessage(i18n("Cannot update clip (time: %1, track: %2)", \
pos.frames(m_document->fps()), track), ErrorMessage); + emit displayMessage(i18n("Cannot update \
clip (time: %1, track: %2)", pos.frames(m_document->fps()), m_timeline->getTrackInfo(track).trackName), \
ErrorMessage); return;
}
clip->update();
diff --git a/src/timeline/timeline.cpp b/src/timeline/timeline.cpp
index 6a6363c..8169f69 100644
--- a/src/timeline/timeline.cpp
+++ b/src/timeline/timeline.cpp
@@ -934,7 +934,7 @@ int Timeline::loadTrack(int ix, Mlt::Playlist &playlist) {
//qDebug()<<"// Loading clip: "<<idString<<" / SPEED: "<<speed<<"\n++++++++++++++++++++++++";
ClipItem *item = new ClipItem(binclip, clipinfo, fps, speed, strobe, \
m_trackview->getFrameWidth(), true);
item->setPos(clipinfo.startPos.frames(fps), KdenliveSettings::trackheight() * \
(visibleTracksCount() - clipinfo.track) + 1 + item->itemOffset());
- qDebug()<<" * * Loaded clip on tk: "<<clipinfo.track<< ", POS: "<<clipinfo.startPos.frames(fps);
+ //qDebug()<<" * * Loaded clip on tk: "<<clipinfo.track<< ", POS: \
"<<clipinfo.startPos.frames(fps); item->updateState(idString);
m_scene->addItem(item);
if (locked) item->setItemLocked(true);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic