]> git.sesse.net Git - kdenlive/commitdiff
Improve support for filter job parameters
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 21 Oct 2012 15:15:11 +0000 (17:15 +0200)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 21 Oct 2012 15:15:11 +0000 (17:15 +0200)
effects/automask.xml
src/customtrackview.cpp
src/customtrackview.h
src/effectstack/parametercontainer.cpp

index 840c9b0c4a220d24a4564021021809d6714d6c76..ddf41893133125cfc3f785d2a6364e2549f2b3fe 100644 (file)
@@ -21,7 +21,7 @@
        <parameter type="bool" name="obscure" default="1">
                <name>Obscure</name>
        </parameter>
-       <parameter type="filterjob" filtertag="autotrack_rectangle:%geometry" filterparams="_serialize=1 motion_vector_list=0" consumer="null" consumerparams="all=1 terminate_on_pause=1" finalfilter="autotrack_rectangle" extraparams="key:motion_vector_list projecttreefilter storedata">
+       <parameter type="filterjob" filtertag="autotrack_rectangle" filterparams="_serialize=1 motion_vector_list=0 %params" consumer="null" consumerparams="all=1 terminate_on_pause=1" finalfilter="autotrack_rectangle" extraparams="key:motion_vector_list projecttreefilter storedata">
                <name>Analyse</name>
        </parameter>
 </effect>
index 029f004ccecfaf98b0f017b3deb1bc81ae080a85..a0833a0d00710c94f32faf2b8f228cd104ce6fc5 100644 (file)
@@ -7319,18 +7319,18 @@ EffectsParameterList CustomTrackView::getEffectArgs(const QDomElement &effect)
            parameters.addParam(QString("filter%1.tag").arg(subeffectix), subeffect.attribute("tag"));
            parameters.addParam(QString("filter%1.kdenlive_info").arg(subeffectix), subeffect.attribute("kdenlive_info"));
            QDomNodeList subparams = subeffect.elementsByTagName("parameter");
-           adjustEffectParameters(parameters, subparams, QString("filter%1.").arg(subeffectix));
+           adjustEffectParameters(parameters, subparams, m_document->mltProfile(), QString("filter%1.").arg(subeffectix));
        }
     }
 
     QDomNodeList params = effect.elementsByTagName("parameter");
-    adjustEffectParameters(parameters, params);
+    adjustEffectParameters(parameters, params, m_document->mltProfile());
     
     return parameters;
 }
 
 
-void CustomTrackView::adjustEffectParameters(EffectsParameterList &parameters, QDomNodeList params, const QString &prefix)
+void CustomTrackView::adjustEffectParameters(EffectsParameterList &parameters, QDomNodeList params, MltVideoProfile profile, const QString &prefix)
 {
   QLocale locale;
   for (int i = 0; i < params.count(); i++) {
@@ -7381,7 +7381,7 @@ void CustomTrackView::adjustEffectParameters(EffectsParameterList &parameters, Q
             if (e.attribute("factor", "1") != "1" || e.attribute("offset", "0") != "0") {
                 double fact;
                 if (e.attribute("factor").contains('%')) {
-                    fact = ProfilesDialog::getStringEval(m_document->mltProfile(), e.attribute("factor"));
+                    fact = ProfilesDialog::getStringEval(profile, e.attribute("factor"));
                 } else {
                     fact = e.attribute("factor", "1").toDouble();
                 }
@@ -7523,13 +7523,17 @@ void CustomTrackView::slotImportClipKeyframes(GRAPHICSRECTITEM type)
     }
     // Make sure there is no collision
     QList<QGraphicsItem *> children = m_selectionGroup->childItems();
-    ClipItem *item;
+    ClipItem *item = NULL;
     for (int i = 0; i < children.count(); i++) {
        if (children.at(i)->type() == AVWIDGET) {
             item = (ClipItem*) children.at(i);
             break;
         }
     }
+    if (!item) {
+       emit displayMessage(i18n("No clip found"), ErrorMessage);
+       return;
+    }
     QMap <QString, QString> data = item->baseClip()->analysisData();
     if (data.isEmpty()) {
        emit displayMessage(i18n("No keyframe data found in clip"), ErrorMessage);
index 240d5f19e1bb6a0a367dc5eb9f20558a86d1e3d0..74f9b9e3349ffabcc59f3fc281e109007daa355d 100644 (file)
@@ -302,6 +302,9 @@ public slots:
     void slotAddEffect(ClipItem *clip, QDomElement effect);
     void slotImportClipKeyframes(GRAPHICSRECTITEM type);
 
+    /** @brief Get effect parameters ready for MLT*/
+    static void adjustEffectParameters(EffectsParameterList &parameters, QDomNodeList params, MltVideoProfile profile, const QString &prefix = QString());
+
 protected:
     virtual void drawBackground(QPainter * painter, const QRectF & rect);
     //virtual void drawForeground ( QPainter * painter, const QRectF & rect );
@@ -475,9 +478,6 @@ private:
     
     /** @brief Prepare an add clip command for an effect */
     void processEffect(ClipItem *item, QDomElement effect, int offset, QUndoCommand *effectCommand);
-    
-    /** @brief Get effect parameters ready for MLT*/
-    void adjustEffectParameters(EffectsParameterList &parameters, QDomNodeList params, const QString &prefix = QString());
 
 private slots:
     void slotRefreshGuides();
index 9dd041f00ae9a61a88e8fb741aa2bb61761686ce..bcaeec5563ad100e29cea5c3d0168b67542cba46 100644 (file)
@@ -43,6 +43,7 @@
 #include "projectlist.h"
 #include "mainwindow.h"
 #include "parametercontainer.h"
+#include "../customtrackview.h"
 
 #include <KUrlRequester>
 #include <KFileDialog>
@@ -808,18 +809,20 @@ void ParameterContainer::slotStartFilterJobAction()
         QDomElement pa = namenode.item(i).toElement();
         QString type = pa.attribute("type");
         if (type == "filterjob") {
-           QString filtertag = pa.attribute("filtertag");
-           if (filtertag.contains("%geometry")) {
+           QString filterparams = pa.attribute("filterparams");
+           if (filterparams.contains("%params")) {
                // Replace with current geometry
-               if (m_geometryWidget) {
-                   QString data = m_geometryWidget->getValue();
-                   filtertag.replace("%geometry", data);
-                   kDebug()<<"// Setting geometry: "<<data<<", RES: "<<filtertag;
-               }
+               EffectsParameterList parameters;
+               QDomNodeList params = m_effect.elementsByTagName("parameter");
+               CustomTrackView::adjustEffectParameters(parameters, params, m_metaInfo->profile);
+               QString paramData;
+               for (int j = 0; j < parameters.count(); j++)
+                   paramData.append(parameters.at(j).name()+"="+parameters.at(j).value()+" ");
+               filterparams.replace("%params", paramData);
            }
            QStringList extra = pa.attribute("extraparams").split(' ', QString::SkipEmptyParts);
-            emit startFilterJob(filtertag, pa.attribute("filterparams"), pa.attribute("finalfilter"), pa.attribute("consumer"), pa.attribute("consumerparams"), extra);
-            kDebug()<<" - - -PROPS:\n"<<"filtertag"<<"-"<< pa.attribute("filterparams")<<"-"<< pa.attribute("consumer")<<"-"<< pa.attribute("consumerparams")<<"-"<< pa.attribute("extraparams");
+            emit startFilterJob(pa.attribute("filtertag"), filterparams, pa.attribute("finalfilter"), pa.attribute("consumer"), pa.attribute("consumerparams"), extra);
+            kDebug()<<" - - -PROPS:\n"<<pa.attribute("filtertag")<<"-"<< filterparams<<"-"<< pa.attribute("consumer")<<"-"<< pa.attribute("consumerparams")<<"-"<< pa.attribute("extraparams");
             break;
         }
     }