]> git.sesse.net Git - kdenlive/commitdiff
Start implementing effects
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 17 Feb 2008 09:02:36 +0000 (09:02 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 17 Feb 2008 09:02:36 +0000 (09:02 +0000)
svn path=/branches/KDE4/; revision=1850

src/CMakeLists.txt
src/effectslist.cpp [new file with mode: 0644]
src/effectslist.h [new file with mode: 0644]
src/initeffects.cpp [new file with mode: 0644]
src/initeffects.h [new file with mode: 0644]
src/kdenlivesettings.kcfg
src/mainwindow.cpp
src/mainwindow.h

index a682066a8b9f5622ee043183552a9edbbed5baf0..5a7e95ec5253a9740b8268dbdf1dc2b556b17ed9 100644 (file)
@@ -58,6 +58,8 @@ set(kdenlive_SRCS
   addtimelineclipcommand.cpp
   kthumb.cpp
   clipmanager.cpp
+  effectslist.cpp
+  initeffects.cpp
 )
 
 kde4_add_kcfg_files(kdenlive_SRCS GENERATE_MOC kdenlivesettings.kcfgc )
diff --git a/src/effectslist.cpp b/src/effectslist.cpp
new file mode 100644 (file)
index 0000000..7007e7b
--- /dev/null
@@ -0,0 +1,57 @@
+/***************************************************************************
+                          docclipbaseiterator.cpp  -  description
+                             -------------------
+    begin                : Sat Aug 10 2002
+    copyright            : (C) 2002 by Jason Wood
+    email                : jasonwood@blueyonder.co.uk
+ ***************************************************************************/
+
+/***************************************************************************
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ ***************************************************************************/
+
+#include <KDebug>
+#include <KLocale>
+
+#include "effectslist.h"
+
+
+EffectsList::EffectsList():
+QList < QDomElement > ()
+{
+}
+
+EffectsList::~EffectsList()
+{
+}
+
+QDomElement EffectsList::getEffectByName(const QString & name)
+{
+  QString effectName;
+  for (int i = 0; i < this->size(); ++i) {
+    QDomElement effect =  this->at(i);
+    QDomNode namenode = effect.elementsByTagName("name").item(0);
+    if (!namenode.isNull()) effectName = i18n(qstrdup(namenode.toElement().text().toUtf8()));
+    if (name == effectName) return effect;
+  }
+
+  return QDomElement();
+}
+
+QStringList EffectsList::effectNames()
+{
+  QStringList list;
+  for (int i = 0; i < this->size(); ++i) {
+    QDomElement effect =  this->at(i);
+    QDomNode namenode = effect.elementsByTagName("name").item(0);
+    if (!namenode.isNull()) list.append(i18n(qstrdup(namenode.toElement().text().toUtf8())));
+  }
+  return list;
+}
+
+
diff --git a/src/effectslist.h b/src/effectslist.h
new file mode 100644 (file)
index 0000000..d555b25
--- /dev/null
@@ -0,0 +1,41 @@
+/***************************************************************************
+                          docclipbaseiterator.h  -  description
+                             -------------------
+    begin                : Sat Aug 10 2002
+    copyright            : (C) 2002 by Jason Wood
+    email                : jasonwood@blueyonder.co.uk
+ ***************************************************************************/
+
+/***************************************************************************
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ ***************************************************************************/
+
+#ifndef EFFECTSLIST_H
+#define EFFECTSLIST_H
+
+#include <QList>
+
+/**An List for DocClipBase objects. Use this instead of QList<DocClipBase> so as to sort lists correctly.
+       * Also contains the ability to set a "master clip", which can be used by a number of operations where
+       * the need for one clip to act as a reference for what happens to all clips is needed.
+  * @author Jason Wood
+  */
+
+#include <QDomElement>
+
+class EffectsList:public QList < QDomElement > {
+  public:
+    EffectsList();
+   ~EffectsList();
+       /** Returns an XML version of this Effect.*/
+  QDomElement getEffectByName(const QString & name);
+  QStringList effectNames();
+
+};
+
+#endif
diff --git a/src/initeffects.cpp b/src/initeffects.cpp
new file mode 100644 (file)
index 0000000..29dd44a
--- /dev/null
@@ -0,0 +1,341 @@
+/***************************************************************************
+                          initeffects.cpp  -  description
+                             -------------------
+    begin                :  Jul 2006
+    copyright            : (C) 2006 by Jean-Baptiste Mardelle
+    email                : jb@ader.ch
+    copyright            : (C) 2008 Marco Gittler
+    email                : g.marco@freenet.de
+ ***************************************************************************/
+
+/***************************************************************************
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ ***************************************************************************/
+
+
+#include <QFile>
+#include <qregexp.h>
+#include <QDir>
+
+#include <KDebug>
+#include <kglobal.h>
+#include <KStandardDirs>
+
+#include "initeffects.h"
+
+initEffects::initEffects()
+{
+}
+
+initEffects::~initEffects()
+{
+}
+
+//static
+Mlt::Repository *initEffects::parseEffectFiles(EffectsList *audioEffectList, EffectsList *videoEffectList)
+{
+    QStringList::Iterator more;
+    QStringList::Iterator it;
+    QStringList fileList;
+    QString itemName;
+
+
+    // Build effects. Retrieve the list of MLT's available effects first.
+    Mlt::Repository *repository = Mlt::Factory::init();
+    if (!repository){
+        kDebug() << "Repository did not finish init " ;
+        return NULL;
+    }
+    Mlt::Properties *filters = repository->filters();
+    QStringList filtersList;
+
+    for (int i=0 ; i <filters->count() ; i++){
+      filtersList << filters->get_name(i);
+    }
+
+    // Build effects. check producers first.
+
+    Mlt::Properties *producers = repository->producers();
+    QStringList producersList;
+    for (int i=0 ; i <producers->count() ; i++){
+      producersList << producers->get_name(i);
+    }
+    delete filters;
+    delete producers;
+
+    KGlobal::dirs()->addResourceType("ladspa_plugin", "lib/ladspa");
+    KGlobal::dirs()->addResourceDir("ladspa_plugin", "/usr/lib/ladspa");
+    KGlobal::dirs()->addResourceDir("ladspa_plugin", "/usr/local/lib/ladspa");
+    KGlobal::dirs()->addResourceDir("ladspa_plugin", "/opt/lib/ladspa");
+    KGlobal::dirs()->addResourceDir("ladspa_plugin", "/opt/local/lib/ladspa");
+
+    kDebug()<<"//  INIT EFFECT SEARCH"<<endl;
+
+    QStringList direc = KGlobal::dirs()->findDirs("data", "kdenlive/effects");
+
+    QDir directory;
+    for ( more = direc.begin() ; more != direc.end() ; ++more ) {
+       directory = QDir(*more);
+       fileList = directory.entryList( QDir::Files );
+       for ( it = fileList.begin() ; it != fileList.end() ; ++it ){
+           itemName = KUrl(*more + *it).path();
+           parseEffectFile(audioEffectList, videoEffectList, itemName, filtersList, producersList);
+           // kDebug()<<"//  FOUND EFFECT FILE: "<<itemName<<endl;
+       }
+    }
+    return repository;
+}
+
+// static
+void initEffects::parseEffectFile(EffectsList *audioEffectList, EffectsList *videoEffectList, QString name, QStringList filtersList, QStringList producersList)
+{
+    QDomDocument doc;
+    QFile file(name);
+    doc.setContent(&file, false);
+    QDomElement documentElement = doc.documentElement();
+    QDomNodeList effects = doc.elementsByTagName("effect");
+
+    if (effects.count() == 0) {
+       kDebug()<<"// EFFECT FILET: "<<name<<" IS BROKEN"<<endl;
+       return;
+    }
+    QString groupName;
+    if (doc.elementsByTagName("effectgroup").item(0).toElement().tagName() == "effectgroup") {
+       groupName = documentElement.attribute("name", QString::null);
+    }
+
+    int i = 0;
+
+    while (!effects.item(i).isNull()) {
+    documentElement = effects.item(i).toElement();
+    QString tag = documentElement.attribute("tag", QString::null);
+    bool ladspaOk = true;
+    if (tag == "ladspa") {
+       QString library = documentElement.attribute("library", QString::null);
+       if (KStandardDirs::locate("ladspa_plugin", library).isEmpty()) ladspaOk = false;
+    }
+
+    // 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();
+//         id = propselement.attribute("id", QString::null);
+//         effectTag = propselement.attribute("tag", QString::null);
+           if (propselement.attribute("type", QString::null) == "audio") isAudioEffect = true;
+           //else if (propselement.attribute("type", QString::null) == "custom") type = CUSTOMEFFECT;
+           //else type = VIDEOEFFECT;
+       }
+       if (isAudioEffect) audioEffectList->append(documentElement);
+       else videoEffectList->append(documentElement);
+     }
+
+/*
+       QDomNode n = documentElement.firstChild();
+       QString id, effectName, effectTag, paramType;
+       int paramCount = 0;
+       EFFECTTYPE type;
+
+        // Create Effect
+        EffectParamDescFactory effectDescParamFactory;
+        EffectDesc *effect = NULL;
+
+       // parse effect file
+       QDomNode namenode = documentElement.elementsByTagName("name").item(0);
+       if (!namenode.isNull()) effectName = i18n(namenode.toElement().text());
+       if (!groupName.isEmpty()) effectName.prepend("_" + groupName + "_");
+
+       QDomNode propsnode = documentElement.elementsByTagName("properties").item(0);
+       if (!propsnode.isNull()) {
+           QDomElement propselement = propsnode.toElement();
+           id = propselement.attribute("id", QString::null);
+           effectTag = propselement.attribute("tag", QString::null);
+           if (propselement.attribute("type", QString::null) == "audio") type = AUDIOEFFECT;
+           else if (propselement.attribute("type", QString::null) == "custom") type = CUSTOMEFFECT;
+           else type = VIDEOEFFECT;
+       }
+
+       QString effectDescription;
+       QDomNode descnode = documentElement.elementsByTagName("description").item(0);
+       if (!descnode.isNull()) effectDescription = descnode.toElement().text() + "<br />";
+
+       QString effectAuthor;
+       QDomNode authnode = documentElement.elementsByTagName("author").item(0);
+       if (!authnode.isNull()) effectAuthor = authnode.toElement().text() + "<br />";
+
+       if (effectName.isEmpty() || id.isEmpty() || effectTag.isEmpty()) return;
+
+       effect = new EffectDesc(effectName, id, effectTag, effectDescription, effectAuthor, type);
+
+       QDomNodeList paramList = documentElement.elementsByTagName("parameter");
+       if (paramList.count() == 0) {
+           QDomElement fixed = doc.createElement("parameter");
+           fixed.setAttribute("type", "fixed");
+           effect->addParameter(effectDescParamFactory.createParameter(fixed));
+       }
+       else for (int i = 0; i < paramList.count(); i++) {
+           QDomElement e = paramList.item(i).toElement();
+           if (!e.isNull()) {
+               paramCount++;
+               QDomNamedNodeMap attrs = e.attributes();
+               int i = 0;
+               QString value;
+               while (!attrs.item(i).isNull()) {
+                   QDomNode n = attrs.item(i);
+                   value = n.nodeValue();
+                   if (value.find("MAX_WIDTH") != -1)
+                       value.replace("MAX_WIDTH", QString::number(KdenliveSettings::defaultwidth()));
+                   if (value.find("MID_WIDTH") != -1)
+                       value.replace("MID_WIDTH", QString::number(KdenliveSettings::defaultwidth() / 2));
+                   if (value.find("MAX_HEIGHT") != -1)
+                       value.replace("MAX_HEIGHT", QString::number(KdenliveSettings::defaultheight()));
+                   if (value.find("MID_HEIGHT") != -1)
+                       value.replace("MID_HEIGHT", QString::number(KdenliveSettings::defaultheight() / 2));
+                   n.setNodeValue(value);
+                   i++;
+               }
+               effect->addParameter(effectDescParamFactory.createParameter(e));
+           }
+       }
+        effectList->append(effect);
+       }*/
+       i++;
+    }
+}
+
+//static 
+char* initEffects::ladspaEffectString(int ladspaId, QStringList params)
+{
+    if (ladspaId == 1433 ) //Pitch
+       return ladspaPitchEffectString(params);
+    else if (ladspaId == 1216 ) //Room Reverb
+       return ladspaRoomReverbEffectString(params);
+    else if (ladspaId == 1423 ) //Reverb
+       return ladspaReverbEffectString(params);
+    else if (ladspaId == 1901 ) //Reverb
+       return ladspaEqualizerEffectString(params);
+    else {
+       kDebug()<<"++++++++++  ASKING FOR UNKNOWN LADSPA EFFECT: "<<ladspaId<<endl;
+       return("<jackrack></jackrack>");
+    }
+}
+
+//static 
+void initEffects::ladspaEffectFile(const QString & fname, int ladspaId, QStringList params)
+{
+    char *filterString;
+    switch (ladspaId) {
+    case 1433: //Pitch
+       filterString = ladspaPitchEffectString(params);
+       break;
+    case 1905: //Vinyl
+       filterString = ladspaVinylEffectString(params);
+       break;
+    case 1216 : //Room Reverb
+       filterString = ladspaRoomReverbEffectString(params);
+       break;
+    case 1423: //Reverb
+       filterString = ladspaReverbEffectString(params);
+       break;
+    case 1195: //Declipper
+       filterString = ladspaDeclipEffectString(params);
+       break;
+    case 1901:  //Reverb
+       filterString = ladspaEqualizerEffectString(params);
+       break;
+    case 1913: // Limiter
+       filterString = ladspaLimiterEffectString(params);
+       break;
+    case 1193: // Pitch Shifter
+       filterString = ladspaPitchShifterEffectString(params);
+       break;
+    case 1417: // Rate Scaler
+       filterString = ladspaRateScalerEffectString(params);
+       break;
+    case 1217: // Phaser
+       filterString = ladspaPhaserEffectString(params);
+       break;
+    default: 
+       kDebug()<<"++++++++++  ASKING FOR UNKNOWN LADSPA EFFECT: "<<ladspaId<<endl;
+       return;
+       break;
+    }
+
+       QFile f( fname );
+       if ( f.open( QIODevice::WriteOnly ) ) 
+       {
+               QTextStream stream( &f );
+               stream << filterString;
+               f.close();
+       }
+       else kDebug()<<"++++++++++  ERROR CANNOT WRITE TO: "<<KdenliveSettings::currenttmpfolder() +  fname<<endl;
+       delete filterString;
+}
+
+QString jackString = "<?xml version=\"1.0\"?><!DOCTYPE jackrack SYSTEM \"http://purge.bash.sh/~rah/jack_rack_1.2.dtd\"><jackrack><channels>2</channels><samplerate>48000</samplerate><plugin><id>";
+
+
+char* initEffects::ladspaDeclipEffectString(QStringList)
+{
+  return qstrdup(QString(jackString + "1195</id><enabled>true</enabled><wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked><wet_dry_values><value>1.000000</value><value>1.000000</value></wet_dry_values><lockall>true</lockall></plugin></jackrack>").toUtf8());
+}
+
+/*
+char* initEffects::ladspaVocoderEffectString(QStringList params)
+{
+       return qstrdup( QString(jackString + "1441</id><enabled>true</enabled><wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked><wet_dry_values><value>1.000000</value><value>1.000000</value></wet_dry_values><lockall>true</lockall><controlrow><lock>true</lock><value>0.000000</value><value>0.000000</value></controlrow><controlrow><lock>true</lock><value>%1</value><value>%1</value></controlrow><controlrow><lock>true</lock><value>%1</value><value>%1</value></controlrow><controlrow><lock>true</lock><value>%1</value><value>%1</value></controlrow><controlrow><lock>true</lock><value>%1</value><value>%1</value></controlrow><controlrow><lock>true</lock><value>%2</value><value>%2</value></controlrow><controlrow><lock>true</lock><value>%2</value><value>%2</value></controlrow><controlrow><lock>true</lock><value>%2</value><value>%2</value></controlrow><controlrow><lock>true</lock><value>%2</value><value>%2</value></controlrow><controlrow><lock>true</lock><value>%3</value><value>%3</value></controlrow><controlrow><lock>true</lock><value>%3</value><value>%3</value></controlrow><controlrow><lock>true</lock><value>%3</value><value>%3</value></controlrow><controlrow><lock>true</lock><value>%3</value><value>%3</value></controlrow><controlrow><lock>true</lock><value>%4</value><value>%4</value></controlrow><controlrow><lock>true</lock><value>%4</value><value>%4</value></controlrow><controlrow><lock>true</lock><value>%4</value><value>%4</value></controlrow><controlrow><lock>true</lock><value>%4</value><value>%4</value></controlrow></plugin></jackrack>").arg(params[0]).arg(params[1]).arg(params[2]).arg(params[3]));
+}*/
+
+char* initEffects::ladspaVinylEffectString(QStringList params)
+{
+       return qstrdup( QString(jackString + "1905</id><enabled>true</enabled><wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked><wet_dry_values><value>1.000000</value><value>1.000000</value></wet_dry_values><controlrow><value>%1</value></controlrow><controlrow><value>%2</value></controlrow><controlrow><value>%3</value></controlrow><controlrow><value>%4</value></controlrow><controlrow><value>%5</value></controlrow></plugin></jackrack>").arg(params[0]).arg(params[1]).arg(params[2]).arg(params[3]).arg(params[4]).toUtf8());
+}
+
+char* initEffects::ladspaPitchEffectString(QStringList params)
+{
+       return qstrdup( QString(jackString + "1433</id><enabled>true</enabled><wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked><wet_dry_values><value>1.0</value><value>1.0</value></wet_dry_values><lockall>true</lockall><controlrow><lock>true</lock><value>%1</value><value>%1</value></controlrow><controlrow><lock>true</lock><value>4.000000</value><value>4.000000</value></controlrow></plugin></jackrack>").arg(params[0]).toUtf8());
+}
+
+char* initEffects::ladspaRoomReverbEffectString(QStringList params)
+{
+       return qstrdup( QString(jackString + "1216</id><enabled>true</enabled><wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked><wet_dry_values><value>1.000000</value><value>1.000000</value></wet_dry_values><lockall>true</lockall><controlrow><lock>true</lock><value>%1</value><value>%1</value></controlrow><controlrow><lock>true</lock><value>%2</value><value>%2</value></controlrow><controlrow><lock>true</lock><value>%3</value><value>%3</value></controlrow><controlrow><lock>true</lock><value>0.750000</value><value>0.750000</value></controlrow><controlrow><lock>true</lock><value>-70.000000</value><value>-70.000000</value></controlrow><controlrow><lock>true</lock><value>0.000000</value><value>0.000000</value></controlrow><controlrow><lock>true</lock><value>-17.500000</value><value>-17.500000</value></controlrow></plugin></jackrack>").arg(params[0]).arg(params[1]).arg(params[2]).toUtf8());
+}
+
+char* initEffects::ladspaReverbEffectString(QStringList params)
+{
+       return qstrdup( QString(jackString + "1423</id><enabled>true</enabled>  <wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked>    <wet_dry_values><value>1.000000</value><value>1.000000</value></wet_dry_values>    <lockall>true</lockall><controlrow><lock>true</lock><value>%1</value>      <value>%1</value></controlrow><controlrow><lock>true</lock><value>%2</value><value>%2</value></controlrow><controlrow><lock>true</lock><value>0.250000</value><value>0.250000</value></controlrow></plugin></jackrack>").arg(params[0]).arg(params[1]).toUtf8());
+}
+
+char* initEffects::ladspaEqualizerEffectString(QStringList params)
+{
+       return qstrdup( QString(jackString + "1901</id><enabled>true</enabled>    <wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked>    <wet_dry_values><value>1.000000</value><value>1.000000</value></wet_dry_values><controlrow><value>%1</value></controlrow><controlrow><value>%2</value></controlrow>    <controlrow><value>%3</value></controlrow></plugin></jackrack>").arg(params[0]).arg(params[1]).arg(params[2]).toUtf8());
+}
+
+char* initEffects::ladspaLimiterEffectString(QStringList params)
+{
+       return qstrdup( QString(jackString + "1913</id><enabled>true</enabled><wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked><wet_dry_values><value>1.000000</value><value>1.000000</value></wet_dry_values><controlrow><value>%1</value></controlrow><controlrow><value>%2</value></controlrow><controlrow><value>%3</value></controlrow></plugin></jackrack>").arg(params[0]).arg(params[1]).arg(params[2]).toUtf8());
+}
+
+char* initEffects::ladspaPitchShifterEffectString(QStringList params)
+{
+       return qstrdup( QString(jackString + "1193</id><enabled>true</enabled><wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked><wet_dry_values><value>1.000000</value><value>1.000000</value></wet_dry_values><lockall>true</lockall><controlrow><lock>true</lock><value>%1</value><value>%1</value></controlrow></plugin></jackrack>").arg(params[0]).toUtf8());
+}
+
+char* initEffects::ladspaRateScalerEffectString(QStringList params)
+{
+       return qstrdup( QString(jackString + "1417</id><enabled>true</enabled><wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked><wet_dry_values><value>1.000000</value><value>1.000000</value></wet_dry_values><lockall>true</lockall><controlrow><lock>true</lock><value>%1</value><value>%1</value></controlrow></plugin></jackrack>").arg(params[0]).toUtf8());
+}
+
+char* initEffects::ladspaPhaserEffectString(QStringList params)
+{
+       return qstrdup( QString(jackString + "1217</id><enabled>true</enabled><wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked><wet_dry_values><value>1.000000</value><value>1.000000</value></wet_dry_values><lockall>true</lockall><controlrow><lock>true</lock><value>%1</value><value>%1</value></controlrow><controlrow><lock>true</lock><value>%2</value><value>%2</value></controlrow><controlrow><lock>true</lock><value>%3</value><value>%3</value></controlrow><controlrow><lock>true</lock><value>%4</value><value>%4</value></controlrow></plugin></jackrack>").arg(params[0]).arg(params[1]).arg(params[2]).arg(params[3]).toUtf8());
+}
+
+
+
diff --git a/src/initeffects.h b/src/initeffects.h
new file mode 100644 (file)
index 0000000..180a88f
--- /dev/null
@@ -0,0 +1,56 @@
+/***************************************************************************
+                          initeffects.h  -  description
+                             -------------------
+    begin                :  Jul 2006
+    copyright            : (C) 2006 by Jean-Baptiste Mardelle
+    email                : jb@ader.ch
+ ***************************************************************************/
+
+/***************************************************************************
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ ***************************************************************************/
+
+#ifndef InitEffects_H
+#define InitEffects_H
+
+#include <klocale.h>
+
+#include <mlt++/Mlt.h>
+
+#include "kdenlivesettings.h"
+#include "effectslist.h"
+
+/**Init the MLT effects
+  *@author Jean-Baptiste Mardelle
+  */
+
+class initEffects
+{
+    public:
+        initEffects();
+       ~initEffects();
+
+       static Mlt::Repository *parseEffectFiles(EffectsList *audioEffectList, EffectsList *videoEffectList);
+       static void parseEffectFile(EffectsList *audioEffectList, EffectsList *videoEffectList, QString name, QStringList filtersList, QStringList producersList);
+       static char* ladspaEffectString(int ladspaId, QStringList params);
+       static void ladspaEffectFile(const QString & fname, int ladspaId, QStringList params);
+
+       static char* ladspaPitchEffectString(QStringList params);
+       static char* ladspaReverbEffectString(QStringList params);
+       static char* ladspaRoomReverbEffectString(QStringList params);
+       static char* ladspaEqualizerEffectString(QStringList params);
+       static char* ladspaDeclipEffectString(QStringList);
+       static char* ladspaVinylEffectString(QStringList params);
+       static char* ladspaLimiterEffectString(QStringList params);
+       static char* ladspaPitchShifterEffectString(QStringList params);
+       static char* ladspaPhaserEffectString(QStringList params);
+       static char* ladspaRateScalerEffectString(QStringList params);
+};
+
+    
+#endif
index 03c188f7edae3efc7f62e3564381a43f9aba2fa7..a11ea149baa353cee4d9920a7899d6c717d82a7b 100644 (file)
@@ -8,10 +8,16 @@
       <label>Default color clip duration.</label>
       <default>00:00:05:00</default>
     </entry>
+
     <entry name="image_duration" type="String">
       <label>Default image clip duration.</label>
       <default>00:00:05:00</default>
     </entry>
+
+    <entry name="currenttmpfolder" type="String">
+      <label>Default folder for tmp files.</label>
+      <default>/tmp</default>
+    </entry>
   </group>
 
   <group name="unmanaged">
index b5e9e2bd4d384a418b84dd7e229946d4b222e85d..926361496eb760e965ecfaf05ee12c51439b159a 100644 (file)
@@ -43,6 +43,7 @@
 #include "mainwindow.h"
 #include "kdenlivesettings.h"
 #include "ui_configmisc_ui.h"
+#include "initeffects.h"
 
 #define ID_STATUS_MSG 1
 #define ID_EDITMODE_MSG 2
@@ -59,7 +60,7 @@ MainWindow::MainWindow(QWidget *parent)
   m_timelineArea->setTabReorderingEnabled(true);
   connect(m_timelineArea, SIGNAL(currentChanged (int)), this, SLOT(activateDocument()));
 
-  Mlt::Factory::init(NULL);
+  initEffects::parseEffectFiles( &m_audioEffects, &m_videoEffects );
   m_monitorManager = new MonitorManager();
 
   projectListDock = new QDockWidget(i18n("Project Tree"), this);
@@ -70,8 +71,8 @@ MainWindow::MainWindow(QWidget *parent)
 
   effectListDock = new QDockWidget(i18n("Effect List"), this);
   effectListDock->setObjectName("effect_list");
-  effectList = new KListWidget(this);
-  effectListDock->setWidget(effectList);
+  m_effectList = new KListWidget(this);
+  effectListDock->setWidget(m_effectList);
   addDockWidget(Qt::TopDockWidgetArea, effectListDock);
   
   effectStackDock = new QDockWidget(i18n("Effect Stack"), this);
@@ -138,6 +139,7 @@ MainWindow::MainWindow(QWidget *parent)
   m_monitorManager->initMonitors(m_clipMonitor, m_projectMonitor);
 
   setAutoSaveSettings();
+  fillEffectsList();
   newFile();
 }
 
@@ -156,6 +158,12 @@ bool MainWindow::queryClose()
   }
 }
 
+void MainWindow::fillEffectsList()
+{
+  QStringList videoEffects = m_videoEffects.effectNames();
+  m_effectList->addItems(videoEffects);
+}
+
 void MainWindow::slotRaiseMonitor(bool clipMonitor)
 {
   if (clipMonitor) clipMonitorDock->raise();
index c7fd6d2f7eda37bb375fa53d12cda967fa8940a6..b2d676afc848c84938fafb7e673d7f3c44639529 100644 (file)
@@ -39,6 +39,7 @@
 #include "kdenlivedoc.h"
 #include "trackview.h"
 #include "customtrackview.h"
+#include "effectslist.h"
 
 class MainWindow : public KXmlGuiWindow
 {
@@ -53,6 +54,7 @@ class MainWindow : public KXmlGuiWindow
   private:
     KTabWidget* m_timelineArea;
     void setupActions();
+    void fillEffectsList();
     QString fileName;
     KdenliveDoc *m_activeDocument;
     MonitorManager *m_monitorManager;
@@ -61,7 +63,7 @@ class MainWindow : public KXmlGuiWindow
     ProjectList *m_projectList;
 
     QDockWidget *effectListDock;
-    KListWidget *effectList;
+    KListWidget *m_effectList;
 
     QDockWidget *effectStackDock;
     KListWidget *effectStack;
@@ -86,6 +88,10 @@ class MainWindow : public KXmlGuiWindow
     QDockWidget *overviewDock;
     CustomTrackView *m_overView;
 
+    EffectsList m_videoEffects;
+    EffectsList m_audioEffects;
+    EffectsList m_customEffects;
+
     KRecentFilesAction *m_fileOpenRecent;
     void readOptions();
     void saveOptions();