]> git.sesse.net Git - kdenlive/blobdiff - src/trackview.cpp
Fix LADSPA effects, should work now:
[kdenlive] / src / trackview.cpp
index 02da1554de75a11c0e50c8999fd24dda09dfa441..7535509648aa32002bc37f99b9964ed604d2b85f 100644 (file)
@@ -34,7 +34,7 @@
 #include "kdenlivedoc.h"
 #include "mainwindow.h"
 #include "customtrackview.h"
-
+#include "initeffects.h"
 
 TrackView::TrackView(KdenliveDoc *doc, QWidget *parent)
         : QWidget(parent), m_doc(doc), m_scale(1.0), m_projectTracks(0) {
@@ -120,10 +120,10 @@ void TrackView::parseDocument(QDomDocument doc) {
     int cursorPos = 0;
     m_documentErrors = QString();
     // kDebug() << "//// DOCUMENT: " << doc.toString();
-    QDomNode props = doc.elementsByTagName("properties").item(0);
+    /*QDomNode props = doc.elementsByTagName("properties").item(0);
     if (!props.isNull()) {
         cursorPos = props.toElement().attribute("timeline_position").toInt();
-    }
+    }*/
 
     // parse project tracks
     QDomNodeList tracks = doc.elementsByTagName("track");
@@ -133,7 +133,6 @@ void TrackView::parseDocument(QDomDocument doc) {
     int trackduration = 0;
     QDomElement e;
     QDomElement p;
-    bool videotrack;
 
     int pos = m_projectTracks - 1;
 
@@ -148,8 +147,15 @@ void TrackView::parseDocument(QDomDocument doc) {
                 p = playlists.item(j).toElement();
                 if (p.attribute("id") == playlist_name) break;
             }
-            videotrack = (e.attribute("hide") != "video");
-            trackduration = slotAddProjectTrack(pos, p, videotrack);
+            if (e.attribute("hide") == "video") {
+                m_doc->switchTrackVideo(i - 1, true);
+            } else if (e.attribute("hide") == "audio") {
+                m_doc->switchTrackAudio(i - 1, true);
+            } else if (e.attribute("hide") == "both") {
+                m_doc->switchTrackVideo(i - 1, true);
+                m_doc->switchTrackAudio(i - 1, true);
+            }
+            trackduration = slotAddProjectTrack(pos, p);
             pos--;
             //kDebug() << " PRO DUR: " << trackduration << ", TRACK DUR: " << duration;
             if (trackduration > duration) duration = trackduration;
@@ -329,7 +335,7 @@ void TrackView::refresh() {
 }
 
 void TrackView::slotRebuildTrackHeaders() {
-    QList <TrackInfo> list = m_trackview->tracksList();
+    QList <TrackInfo> list = m_doc->tracksList();
     QList<HeaderTrack *> widgets = this->findChildren<HeaderTrack *>();
     for (int i = 0; i < widgets.count(); i++)
         delete widgets.at(i);
@@ -339,29 +345,16 @@ void TrackView::slotRebuildTrackHeaders() {
         connect(header, SIGNAL(switchTrackVideo(int)), m_trackview, SLOT(slotSwitchTrackVideo(int)));
         connect(header, SIGNAL(switchTrackAudio(int)), m_trackview, SLOT(slotSwitchTrackAudio(int)));
 
-        //TODO: re-enable when add / remove track is implemented
-        connect(header, SIGNAL(deleteTrack(int)), m_trackview, SLOT(slotDeleteTrack(int)));
-        connect(header, SIGNAL(insertTrack(int)), m_trackview, SLOT(slotInsertTrack(int)));
+        connect(header, SIGNAL(deleteTrack(int)), this, SIGNAL(deleteTrack(int)));
+        connect(header, SIGNAL(insertTrack(int)), this, SIGNAL(insertTrack(int)));
+        connect(header, SIGNAL(changeTrack(int)), this, SIGNAL(changeTrack(int)));
         m_headersLayout->addWidget(header);
     }
     view->headers_container->adjustSize();
 }
 
-int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool videotrack) {
-    TrackInfo info;
-
-    if (videotrack) {
-        info.type = VIDEOTRACK;
-        info.isMute = false;
-        info.isBlind = false;
-    } else {
-        info.type = AUDIOTRACK;
-        info.isMute = false;
-        info.isBlind = false;
-    }
-
-    m_trackview->addTrack(info);
 
+int TrackView::slotAddProjectTrack(int ix, QDomElement xml) {
     int trackTop = KdenliveSettings::trackheight() * ix;
     // parse track
     int position = 0;
@@ -408,6 +401,7 @@ int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool videotrack) {
                         QString effecttag;
                         QString effectid;
                         QString effectindex;
+                        QString ladspaEffectFile;
                         // Get effect tag & index
                         for (QDomNode n3 = effect.firstChild(); !n3.isNull(); n3 = n3.nextSibling()) {
                             // parse effect parameters
@@ -418,6 +412,15 @@ int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool videotrack) {
                                 effectid = effectparam.text();
                             } else if (effectparam.attribute("name") == "kdenlive_ix") {
                                 effectindex = effectparam.text();
+                            } else if (effectparam.attribute("name") == "src") {
+                                ladspaEffectFile = effectparam.text();
+                                if (!QFile::exists(ladspaEffectFile)) {
+                                    // If the ladspa effect file is missing, recreate it
+                                    kDebug() << "// MISSING LADSPA FILE: " << ladspaEffectFile;
+                                    ladspaEffectFile = m_doc->getLadspaFile();
+                                    effectparam.firstChild().setNodeValue(ladspaEffectFile);
+                                    kDebug() << "// ... REPLACED WITH: " << ladspaEffectFile;
+                                }
                             }
                         }
                         //kDebug() << "+ + CLIP EFF FND: " << effecttag << ", " << effectid << ", " << effectindex;
@@ -520,16 +523,29 @@ int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool videotrack) {
                                 QString paramname = effectparam.attribute("name");
                                 QString paramvalue = effectparam.text();
 
+
                                 // try to find this parameter in the effect xml
                                 QDomElement e;
                                 for (int k = 0; k < clipeffectparams.count(); k++) {
                                     e = clipeffectparams.item(k).toElement();
                                     if (!e.isNull() && e.tagName() == "parameter" && e.attribute("name") == paramname) {
-                                        e.setAttribute("value", paramvalue);
+                                        double factor = e.attribute("factor", "1").toDouble();
+                                        if (factor != 1) {
+                                            e.setAttribute("value", paramvalue.toDouble() * factor);
+                                        } else e.setAttribute("value", paramvalue);
                                         break;
                                     }
                                 }
                             }
+                            if (effecttag == "ladspa") {
+                                //QString ladspaEffectFile = EffectsList::parameter(effect, "src", "property");
+
+                                if (!QFile::exists(ladspaEffectFile)) {
+                                    // If the ladspa effect file is missing, recreate it
+                                    initEffects::ladspaEffectFile(ladspaEffectFile, currenteffect.attribute("ladspaid").toInt(), m_trackview->getLadspaParams(currenteffect));
+                                }
+                                currenteffect.setAttribute("src", ladspaEffectFile);
+                            }
                             item->addEffect(currenteffect, false);
                             item->effectsCounter();
                         }