]> git.sesse.net Git - kdenlive/blobdiff - src/initeffects.cpp
Fix freeze when making fast play / pause
[kdenlive] / src / initeffects.cpp
index 884438ecdbcf4c0931205197be44e5ad37b2394b..e21c65f766b688edfd826593e8029fc71f436b6c 100644 (file)
@@ -196,33 +196,16 @@ Mlt::Repository *initEffects::parseEffectFiles()
     KGlobal::dirs()->addResourceDir("ladspa_plugin", "/usr/lib64/ladspa");
     KGlobal::dirs()->addResourceDir("ladspa_plugin", "/usr/local/lib64/ladspa");*/
 
-    // Set the directories to look into for effects.
-    QStringList direc = KGlobal::dirs()->findDirs("appdata", "effects");
-
-    // Iterate through effects directories to parse all XML files.
-    for (more = direc.begin(); more != direc.end(); ++more) {
-        QDir directory(*more);
-        QStringList filter;
-        filter << "*.xml";
-        fileList = directory.entryList(filter, QDir::Files);
-        for (it = fileList.begin(); it != fileList.end(); ++it) {
-            itemName = KUrl(*more + *it).path();
-            parseEffectFile(&MainWindow::customEffects,
-                            &MainWindow::audioEffects,
-                            &MainWindow::videoEffects,
-                            itemName, filtersList, producersList, repository);
-        }
-    }
-
     // Remove blacklisted effects from the filters list.
+    QStringList mltFiltersList = filtersList;
     QFile file2(KStandardDirs::locate("appdata", "blacklisted_effects.txt"));
     if (file2.open(QIODevice::ReadOnly)) {
         QTextStream in(&file2);
         while (!in.atEnd()) {
             QString black = in.readLine().simplified();
             if (!black.isEmpty() && !black.startsWith('#') &&
-                    filtersList.contains(black))
-                filtersList.removeAll(black);
+                    mltFiltersList.contains(black))
+                mltFiltersList.removeAll(black);
         }
         file2.close();
     }
@@ -251,6 +234,43 @@ Mlt::Repository *initEffects::parseEffectFiles()
         MainWindow::transitions.append(effect);
     effectsMap.clear();
 
+    // Create effects from MLT
+    foreach(const QString & filtername, mltFiltersList) {
+        QDomDocument doc = createDescriptionFromMlt(repository, "filters", filtername);
+        //WARNING: TEMPORARY FIX for empty MLT effects descriptions - disable effects without parameters - jbm 09-06-2011
+        if (!doc.isNull() && doc.elementsByTagName("parameter").count() > 0) {
+            if (doc.documentElement().attribute("type") == "audio") {
+                if (doc.elementsByTagName("description").count() > 0) {
+                    QString desc = doc.documentElement().elementsByTagName("description").item(0).toElement().text();
+                    //WARNING: TEMPORARY FIX for unusable MLT SOX parameters description
+                    if (desc.startsWith("Process audio using a SoX")) {
+                        // Remove MLT's SOX generated effects since the parameters properties are unusable for us
+                    }
+                    else audioEffectsMap.insert(doc.documentElement().elementsByTagName("name").item(0).toElement().text().toLower().toUtf8().data(), doc.documentElement());
+                }
+            }
+            else
+                videoEffectsMap.insert(doc.documentElement().elementsByTagName("name").item(0).toElement().text().toLower().toUtf8().data(), doc.documentElement());
+        }
+    }
+
+    // Set the directories to look into for effects.
+    QStringList direc = KGlobal::dirs()->findDirs("appdata", "effects");
+    // Iterate through effects directories to parse all XML files.
+    for (more = direc.begin(); more != direc.end(); ++more) {
+        QDir directory(*more);
+        QStringList filter;
+        filter << "*.xml";
+        fileList = directory.entryList(filter, QDir::Files);
+        for (it = fileList.begin(); it != fileList.end(); ++it) {
+            itemName = KUrl(*more + *it).path();
+            parseEffectFile(&MainWindow::customEffects,
+                            &MainWindow::audioEffects,
+                            &MainWindow::videoEffects,
+                            itemName, filtersList, producersList, repository);
+        }
+    }
+
     // Create custom effects
     for (int i = 0; i < MainWindow::customEffects.count(); ++i) {
         effectInfo = MainWindow::customEffects.at(i);
@@ -261,19 +281,6 @@ Mlt::Repository *initEffects::parseEffectFiles()
         MainWindow::customEffects.append(effect);
     effectsMap.clear();
 
-    // Create effects from MLT
-    foreach(const QString & filtername, filtersList) {
-        QDomDocument doc = createDescriptionFromMlt(repository, "filters", filtername);
-        if (!doc.isNull()) {
-            //kDebug()<<"ADDING: "<<doc.documentElement().elementsByTagName("name").item(0).toElement().text().toLower().toUtf8().data();
-            if (doc.documentElement().attribute("type") == "audio") {
-                audioEffectsMap.insert(doc.documentElement().elementsByTagName("name").item(0).toElement().text().toLower().toUtf8().data(), doc.documentElement());
-            }
-            else
-                videoEffectsMap.insert(doc.documentElement().elementsByTagName("name").item(0).toElement().text().toLower().toUtf8().data(), doc.documentElement());
-        }
-    }
-
     // Create audio effects
     for (int i = 0; i < MainWindow::audioEffects.count(); ++i) {
         effectInfo = MainWindow::audioEffects.at(i);
@@ -703,6 +710,10 @@ void initEffects::fillTransitionsList(Mlt::Repository *repository, EffectsList *
         path.addPath(fname);
         imagefiles.append(path.toLocalFile());
     }
+    
+    //WARNING: this is a hack to get around temporary invalid metadata in MLT, 2nd of june 2011 JBM
+    QStringList customTransitions;
+    customTransitions << "composite" << "luma" << "affine" << "mix" << "region";
 
     foreach(const QString & name, names) {
         QDomDocument ret;
@@ -715,7 +726,7 @@ void initEffects::fillTransitionsList(Mlt::Repository *repository, EffectsList *
         ktrans.appendChild(tname);
         ktrans.appendChild(desc);
         Mlt::Properties *metadata = repository->metadata(transition_type, name.toUtf8().data());
-        if (metadata && metadata->is_valid()) {
+        if (!customTransitions.contains(name) && metadata && metadata->is_valid()) {
             // If possible, set name and description.
             if (metadata->get("title") && metadata->get("identifier"))
                 tname.appendChild(ret.createTextNode(metadata->get("title")));