]> git.sesse.net Git - kdenlive/blobdiff - src/initeffects.cpp
Update profiles.xml
[kdenlive] / src / initeffects.cpp
index b8468045a34e4fba6c340116f2ced80a683a3a1b..8ec8551a87bf468f9e5ad22ce50d8dd2bc0e8cd5 100644 (file)
@@ -83,6 +83,36 @@ Mlt::Repository *initEffects::parseEffectFiles() {
     Mlt::Properties *filters = repository->filters();
     QStringList filtersList;
 
+    // Check for blacklisted effects
+    QString blacklist = KStandardDirs::locate("appdata", "blacklisted_effects.txt");
+
+    QFile file(blacklist);
+    QStringList blackListed;
+
+    if (file.open(QIODevice::ReadOnly)) {
+        QTextStream in(&file);
+        while (!in.atEnd()) {
+            QString black = in.readLine().simplified();
+            if (!black.isEmpty() && !black.startsWith('#')) blackListed.append(black);
+        }
+    }
+    file.close();
+
+    // Check for blacklisted transitions
+    blacklist = KStandardDirs::locate("appdata", "blacklisted_transitions.txt");
+
+    QFile file2(blacklist);
+    QStringList blackListedtransitions;
+
+    if (file2.open(QIODevice::ReadOnly)) {
+        QTextStream in(&file2);
+        while (!in.atEnd()) {
+            QString black = in.readLine().simplified();
+            if (!black.isEmpty() && !black.startsWith('#')) blackListedtransitions.append(black);
+        }
+    }
+    file2.close();
+
     for (int i = 0 ; i < filters->count() ; i++) {
         filtersList << filters->get_name(i);
     }
@@ -103,6 +133,10 @@ Mlt::Repository *initEffects::parseEffectFiles() {
         transitionsItemList << transitions->get_name(i);
     }
     delete transitions;
+
+    foreach(const QString &trans, blackListedtransitions) {
+        if (transitionsItemList.contains(trans)) transitionsItemList.removeAll(trans);
+    }
     fillTransitionsList(repository, &MainWindow::transitions, transitionsItemList);
 
     KGlobal::dirs()->addResourceType("ladspa_plugin", 0, "lib/ladspa");
@@ -127,6 +161,11 @@ Mlt::Repository *initEffects::parseEffectFiles() {
             // kDebug()<<"//  FOUND EFFECT FILE: "<<itemName<<endl;
         }
     }
+
+    foreach(const QString &effect, blackListed) {
+        if (filtersList.contains(effect)) filtersList.removeAll(effect);
+    }
+
     foreach(const QString &filtername, filtersList) {
         QDomDocument doc = createDescriptionFromMlt(repository, "filters", filtername);
         if (!doc.isNull())
@@ -138,7 +177,7 @@ Mlt::Repository *initEffects::parseEffectFiles() {
 // static
 void initEffects::parseCustomEffectsFile() {
     MainWindow::customEffects.clear();
-    QString path = KStandardDirs::locateLocal("data", "kdenlive/effects/", true);
+    QString path = KStandardDirs::locateLocal("appdata", "effects/", true);
     QDir directory = QDir(path);
     QStringList filter;
     filter << "*.xml";
@@ -192,14 +231,10 @@ void initEffects::parseEffectFile(EffectsList *customEffectList, EffectsList *au
         // Parse effect file
         if ((filtersList.contains(tag) || producersList.contains(tag)) && ladspaOk) {
             bool isAudioEffect = false;
-            QDomNode propsnode = documentElement.elementsByTagName("properties").item(0);
-            if (!propsnode.isNull()) {
-                QDomElement propselement = propsnode.toElement();
-                QString type = propselement.attribute("type", QString::null);
-                if (type == "audio") audioEffectList->append(documentElement);
-                else if (type == "custom") customEffectList->append(documentElement);
-                else videoEffectList->append(documentElement);
-            } else videoEffectList->append(documentElement);
+            QString type = documentElement.attribute("type", QString::null);
+            if (type == "audio") audioEffectList->append(documentElement);
+            else if (type == "custom") customEffectList->append(documentElement);
+            else videoEffectList->append(documentElement);
         }
 
         /*
@@ -399,6 +434,7 @@ QDomDocument initEffects::createDescriptionFromMlt(Mlt::Repository* repository,
         if (metadata->get("title") && metadata->get("identifier")) {
             QDomElement eff = ret.createElement("effect");
             eff.setAttribute("tag", metadata->get("identifier"));
+            eff.setAttribute("id", metadata->get("identifier"));
 
             QDomElement name = ret.createElement("name");
             name.appendChild(ret.createTextNode(metadata->get("title")));
@@ -409,13 +445,9 @@ QDomDocument initEffects::createDescriptionFromMlt(Mlt::Repository* repository,
             QDomElement author = ret.createElement("author");
             author.appendChild(ret.createTextNode(metadata->get("creator")));
 
-            QDomElement prop = ret.createElement("properties");
-            prop.setAttribute("id", metadata->get("identifier"));
-            prop.setAttribute("tag", metadata->get("identifier"));
             eff.appendChild(name);
             eff.appendChild(author);
             eff.appendChild(desc);
-            eff.appendChild(prop);
 
             Mlt::Properties param_props((mlt_properties) metadata->get_data("parameters"));
             for (int j = 0; param_props.is_valid() && j < param_props.count();j++) {
@@ -470,6 +502,11 @@ QDomDocument initEffects::createDescriptionFromMlt(Mlt::Repository* repository,
 }
 
 void initEffects::fillTransitionsList(Mlt::Repository * repository, EffectsList* transitions, QStringList names) {
+    // remove transitions that are not implemented
+    int pos = names.indexOf("mix");
+    if (pos != -1) names.takeAt(pos);
+    pos = names.indexOf("region");
+    if (pos != -1) names.takeAt(pos);
     foreach(const QString &name, names) {
         QDomDocument ret;
         QDomElement ktrans = ret.createElement("ktransition");
@@ -549,12 +586,13 @@ void initEffects::fillTransitionsList(Mlt::Repository * repository, EffectsList*
                 paramList.append(quickParameterFill(ret, "Softness", "softness", "double", "0", "0", "100", "", "", "100"));
                 paramList.append(quickParameterFill(ret, "Invert", "invert", "bool", "0", "0", "1"));
                 paramList.append(quickParameterFill(ret, "ImageFile", "resource", "list", "", "", "", imagefiles, imagenamelist));
+                paramList.append(quickParameterFill(ret, "Reverse Transition", "reverse", "bool", "0", "0", "1"));
                 //thumbnailer.prepareThumbnailsCall(imagelist);
 
             } else if (name == "composite") {
-                paramList.append(quickParameterFill(ret, "Geometry", "geometry", "geometry", "0;0;100;100;100", "-500;-500;-500;-500;0", "500;500;500;500;100"));
+                paramList.append(quickParameterFill(ret, "Geometry", "geometry", "geometry", "0%,0%:100%x100%:100", "-500;-500;-500;-500;0", "500;500;500;500;100"));
+                paramList.append(quickParameterFill(ret, "Distort", "distort", "bool", "1", "1", "1"));
                 tname.appendChild(ret.createTextNode("Composite"));
-
                 QDomDocument ret1;
                 QDomElement ktrans1 = ret1.createElement("ktransition");
                 ret1.appendChild(ktrans1);
@@ -588,7 +626,7 @@ void initEffects::fillTransitionsList(Mlt::Repository * repository, EffectsList*
 
 
         }
-        paramList.append(quickParameterFill(ret, "Reverse Transition", "reverse", "bool", "0", "0", "1"));
+
         ktrans.appendChild(tname);
 
         foreach(const QDomElement &e, paramList) {
@@ -597,8 +635,8 @@ void initEffects::fillTransitionsList(Mlt::Repository * repository, EffectsList*
 
 
         transitions->append(ret.documentElement());
-        kDebug() << "//// ////  TRANSITON XML";
-        kDebug() << ret.toString();
+        //kDebug() << "//// ////  TRANSITON XML";
+        //kDebug() << ret.toString();
         /*
 
          <transition fill="1" in="11" a_track="1" out="73" mlt_service="luma" b_track="2" softness="0" resource="/home/marco/Projekte/kdenlive/install_cmake/share/apps/kdenlive/pgm/PAL/square2.pgm" />