]> git.sesse.net Git - kdenlive/commitdiff
First steps towards track effects
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 17 Aug 2010 09:32:46 +0000 (09:32 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 17 Aug 2010 09:32:46 +0000 (09:32 +0000)
svn path=/trunk/kdenlive/; revision=4737

src/clipitem.cpp
src/clipitem.h
src/customtrackview.cpp
src/customtrackview.h
src/headertrack.cpp
src/headertrack.h
src/renderer.cpp
src/renderer.h
src/trackview.cpp

index f3a3babab39b555d59972190935b49174155802a..7a6d6bc17778561980313ccf24d2bc020618b49f 100644 (file)
@@ -1525,73 +1525,6 @@ EffectsParameterList ClipItem::addEffect(const QDomElement effect, bool /*animat
     return parameters;
 }
 
-EffectsParameterList ClipItem::getEffectArgs(const QDomElement effect)
-{
-    EffectsParameterList parameters;
-    parameters.addParam("tag", effect.attribute("tag"));
-    if (effect.hasAttribute("region")) parameters.addParam("region", effect.attribute("region"));
-    parameters.addParam("kdenlive_ix", effect.attribute("kdenlive_ix"));
-    parameters.addParam("id", effect.attribute("id"));
-    if (effect.hasAttribute("src")) parameters.addParam("src", effect.attribute("src"));
-    if (effect.hasAttribute("disable")) parameters.addParam("disable", effect.attribute("disable"));
-    if (effect.hasAttribute("in")) parameters.addParam("in", effect.attribute("in"));
-    if (effect.hasAttribute("out")) parameters.addParam("out", effect.attribute("out"));
-
-    QDomNodeList params = effect.elementsByTagName("parameter");
-    for (int i = 0; i < params.count(); i++) {
-        QDomElement e = params.item(i).toElement();
-        //kDebug() << "/ / / /SENDING EFFECT PARAM: " << e.attribute("type") << ", NAME_ " << e.attribute("tag");
-        if (e.attribute("type") == "simplekeyframe") {
-
-            QStringList values = e.attribute("keyframes").split(";", QString::SkipEmptyParts);
-            double factor = e.attribute("factor", "1").toDouble();
-            for (int j = 0; j < values.count(); j++) {
-                QString pos = values.at(j).section(":", 0, 0);
-                double val = values.at(j).section(":", 1, 1).toDouble() / factor;
-                values[j] = pos + "=" + QString::number(val);
-            }
-            // kDebug() << "/ / / /SENDING KEYFR:" << values;
-            parameters.addParam(e.attribute("name"), values.join(";"));
-            /*parameters.addParam(e.attribute("name"), e.attribute("keyframes").replace(":", "="));
-            parameters.addParam("max", e.attribute("max"));
-            parameters.addParam("min", e.attribute("min"));
-            parameters.addParam("factor", e.attribute("factor", "1"));*/
-        } else if (e.attribute("type") == "keyframe") {
-            kDebug() << "/ / / /SENDING KEYFR EFFECT TYPE";
-            parameters.addParam("keyframes", e.attribute("keyframes"));
-            parameters.addParam("max", e.attribute("max"));
-            parameters.addParam("min", e.attribute("min"));
-            parameters.addParam("factor", e.attribute("factor", "1"));
-            parameters.addParam("starttag", e.attribute("starttag", "start"));
-            parameters.addParam("endtag", e.attribute("endtag", "end"));
-        } else if (e.attribute("namedesc").contains(';')) {
-            QString format = e.attribute("format");
-            QStringList separators = format.split("%d", QString::SkipEmptyParts);
-            QStringList values = e.attribute("value").split(QRegExp("[,:;x]"));
-            QString neu;
-            QTextStream txtNeu(&neu);
-            if (values.size() > 0)
-                txtNeu << (int)values[0].toDouble();
-            for (int i = 0; i < separators.size() && i + 1 < values.size(); i++) {
-                txtNeu << separators[i];
-                txtNeu << (int)(values[i+1].toDouble());
-            }
-            parameters.addParam("start", neu);
-        } else {
-            if (e.attribute("factor", "1") != "1") {
-                double fact;
-                if (e.attribute("factor").startsWith('%')) {
-                    fact = ProfilesDialog::getStringEval(projectScene()->profile(), e.attribute("factor"));
-                } else fact = e.attribute("factor", "1").toDouble();
-                parameters.addParam(e.attribute("name"), QString::number(e.attribute("value").toDouble() / fact));
-            } else {
-                parameters.addParam(e.attribute("name"), e.attribute("value"));
-            }
-        }
-    }
-    return parameters;
-}
-
 void ClipItem::deleteEffect(QString index)
 {
     bool needRepaint = false;
index 27fc24d02aced85fac2bd61aaf701b2497ae99d7..07c6698858a46e1221ab7b70896414fe664cfffc 100644 (file)
@@ -72,9 +72,6 @@ public:
     * @return The parameters that will be passed to Mlt */
     EffectsParameterList addEffect(const QDomElement effect, bool animate = true);
 
-    /** @brief Gets the effect parameters that will be passed to Mlt. */
-    EffectsParameterList getEffectArgs(QDomElement effect);
-
     /** @brief Deletes the effect with id @param index. */
     void deleteEffect(QString index);
 
index e191ae36b385a294ba27b7ff989663a98d860bbb..24cc31663edf90faa6a3775eeb56d2452b74d425 100644 (file)
@@ -60,6 +60,7 @@
 #include "configtrackscommand.h"
 #include "rebuildgroupcommand.h"
 #include "razorgroupcommand.h"
+#include "profilesdialog.h"
 
 #include <KDebug>
 #include <KLocale>
@@ -1537,7 +1538,7 @@ void CustomTrackView::slotRefreshEffects(ClipItem *clip)
     }
     bool success = true;
     for (int i = 0; i < clip->effectsCount(); i++) {
-        if (!m_document->renderer()->mltAddEffect(track, pos, clip->getEffectArgs(clip->effectAt(i)), false)) success = false;
+        if (!m_document->renderer()->mltAddEffect(track, pos, getEffectArgs(clip->effectAt(i)), false)) success = false;
     }
     if (!success) emit displayMessage(i18n("Problem adding effect to clip"), ErrorMessage);
     m_document->renderer()->doRefresh();
@@ -1773,7 +1774,7 @@ void CustomTrackView::updateEffect(int track, GenTime pos, QDomElement insertedE
             return;
         }
 
-        EffectsParameterList effectParams = clip->getEffectArgs(effect);
+        EffectsParameterList effectParams = getEffectArgs(effect);
         if (effect.attribute("tag") == "ladspa") {
             // Update the ladspa affect file
             initEffects::ladspaEffectFile(effect.attribute("src"), effect.attribute("ladspaid").toInt(), getLadspaParams(effect));
@@ -1781,7 +1782,7 @@ void CustomTrackView::updateEffect(int track, GenTime pos, QDomElement insertedE
         // check if we are trying to reset a keyframe effect
         if (effectParams.hasParam("keyframes") && effectParams.paramValue("keyframes").isEmpty()) {
             clip->initEffect(effect);
-            effectParams = clip->getEffectArgs(effect);
+            effectParams = getEffectArgs(effect);
         }
         if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - clip->track(), clip->startPos(), effectParams))
             emit displayMessage(i18n("Problem editing effect"), ErrorMessage);
@@ -3208,7 +3209,7 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event)
                             prod = clip->baseClip()->producer(info.track);
                         m_document->renderer()->mltInsertClip(info, clip->xml(), prod, m_scene->editMode() == OVERWRITEEDIT, m_scene->editMode() == INSERTEDIT);
                         for (int i = 0; i < clip->effectsCount(); i++) {
-                            m_document->renderer()->mltAddEffect(info.track, info.startPos, clip->getEffectArgs(clip->effectAt(i)), false);
+                            m_document->renderer()->mltAddEffect(info.track, info.startPos, getEffectArgs(clip->effectAt(i)), false);
                         }
                     } else {
                         Transition *tr = static_cast <Transition*>(item);
@@ -3609,7 +3610,7 @@ void CustomTrackView::cutSelectedClips()
                 for (int j = 0; j < children.count(); ++j) {
                     for (int k = 0; k < itemList.count(); ++k) {
                         if (children.at(j)->pos() == itemList.at(k)->pos()
-                            && children.at(j)->boundingRect() == itemList.at(k)->boundingRect()) {
+                                && children.at(j)->boundingRect() == itemList.at(k)->boundingRect()) {
                             toRemove.append(k);
                         }
                     }
@@ -3631,7 +3632,7 @@ void CustomTrackView::cutSelectedClips()
             for (int j = 0; j < children.count(); ++j) {
                 for (int k = 0; k < itemList.count(); ++k) {
                     if (children.at(j)->pos() == itemList.at(k)->pos()
-                        && children.at(j)->boundingRect() == itemList.at(k)->boundingRect()) {
+                            && children.at(j)->boundingRect() == itemList.at(k)->boundingRect()) {
                         toRemove.append(k);
                     }
                 }
@@ -3845,7 +3846,7 @@ void CustomTrackView::addClip(QDomElement xml, const QString &clipId, ItemInfo i
     else prod = baseclip->producer(info.track);
     m_document->renderer()->mltInsertClip(info, xml, prod, overwrite, push);
     for (int i = 0; i < item->effectsCount(); i++) {
-        m_document->renderer()->mltAddEffect(info.track, info.startPos, item->getEffectArgs(item->effectAt(i)), false);
+        m_document->renderer()->mltAddEffect(info.track, info.startPos, getEffectArgs(item->effectAt(i)), false);
     }
     setDocumentModified();
     if (refresh) m_document->renderer()->doRefresh();
@@ -4493,7 +4494,7 @@ void CustomTrackView::updatePositionEffects(ClipItem * item, ItemInfo info)
             end += start;
             EffectsList::setParameter(oldeffect, "in", QString::number(start));
             EffectsList::setParameter(oldeffect, "out", QString::number(end));
-            if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), item->getEffectArgs(oldeffect)))
+            if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), getEffectArgs(oldeffect)))
                 emit displayMessage(i18n("Problem editing effect"), ErrorMessage);
             // if fade effect is displayed, update the effect edit widget with new clip duration
             if (item->isSelected() && effectPos == item->selectedEffectIndex()) emit clipItemSelected(item, effectPos);
@@ -4511,7 +4512,7 @@ void CustomTrackView::updatePositionEffects(ClipItem * item, ItemInfo info)
             end += start;
             EffectsList::setParameter(oldeffect, "in", QString::number(start));
             EffectsList::setParameter(oldeffect, "out", QString::number(end));
-            if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), item->getEffectArgs(oldeffect)))
+            if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), getEffectArgs(oldeffect)))
                 emit displayMessage(i18n("Problem editing effect"), ErrorMessage);
             // if fade effect is displayed, update the effect edit widget with new clip duration
             if (item->isSelected() && effectPos == item->selectedEffectIndex()) emit clipItemSelected(item, effectPos);
@@ -4533,7 +4534,7 @@ void CustomTrackView::updatePositionEffects(ClipItem * item, ItemInfo info)
             start = end - start;
             EffectsList::setParameter(oldeffect, "in", QString::number(start));
             EffectsList::setParameter(oldeffect, "out", QString::number(end));
-            if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), item->getEffectArgs(oldeffect)))
+            if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), getEffectArgs(oldeffect)))
                 emit displayMessage(i18n("Problem editing effect"), ErrorMessage);
             // if fade effect is displayed, update the effect edit widget with new clip duration
             if (item->isSelected() && effectPos == item->selectedEffectIndex()) emit clipItemSelected(item, effectPos);
@@ -4551,7 +4552,7 @@ void CustomTrackView::updatePositionEffects(ClipItem * item, ItemInfo info)
             start = end - start;
             EffectsList::setParameter(oldeffect, "in", QString::number(start));
             EffectsList::setParameter(oldeffect, "out", QString::number(end));
-            if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), item->getEffectArgs(oldeffect)))
+            if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), getEffectArgs(oldeffect)))
                 emit displayMessage(i18n("Problem editing effect"), ErrorMessage);
             // if fade effect is displayed, update the effect edit widget with new clip duration
             if (item->isSelected() && effectPos == item->selectedEffectIndex()) emit clipItemSelected(item, effectPos);
@@ -4583,7 +4584,7 @@ void CustomTrackView::updatePositionEffects(ClipItem * item, ItemInfo info)
         }
         oldeffect.setAttribute("in", start);
         oldeffect.setAttribute("out", max);
-        if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), item->getEffectArgs(oldeffect)))
+        if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), getEffectArgs(oldeffect)))
             emit displayMessage(i18n("Problem editing effect"), ErrorMessage);
         // if effect is displayed, update the effect edit widget with new clip duration
         if (item->isSelected() && effectPos == item->selectedEffectIndex()) emit clipItemSelected(item, effectPos);
@@ -5411,7 +5412,7 @@ void CustomTrackView::slotUpdateAllThumbs()
                         item->slotSetEndThumb(pix);
                     }
                 }
-               item->refreshClip(false);
+                item->refreshClip(false);
             }
         }
     }
@@ -6259,3 +6260,76 @@ bool CustomTrackView::hasAudio(int track) const
     }
     return false;
 }
+
+void CustomTrackView::slotAddTrackEffect(const QDomElement effect, int ix)
+{
+    m_document->renderer()->mltAddTrackEffect(m_document->tracksCount() - ix, getEffectArgs(effect));
+}
+
+
+EffectsParameterList CustomTrackView::getEffectArgs(const QDomElement effect)
+{
+    EffectsParameterList parameters;
+    parameters.addParam("tag", effect.attribute("tag"));
+    if (effect.hasAttribute("region")) parameters.addParam("region", effect.attribute("region"));
+    parameters.addParam("kdenlive_ix", effect.attribute("kdenlive_ix"));
+    parameters.addParam("id", effect.attribute("id"));
+    if (effect.hasAttribute("src")) parameters.addParam("src", effect.attribute("src"));
+    if (effect.hasAttribute("disable")) parameters.addParam("disable", effect.attribute("disable"));
+    if (effect.hasAttribute("in")) parameters.addParam("in", effect.attribute("in"));
+    if (effect.hasAttribute("out")) parameters.addParam("out", effect.attribute("out"));
+
+    QDomNodeList params = effect.elementsByTagName("parameter");
+    for (int i = 0; i < params.count(); i++) {
+        QDomElement e = params.item(i).toElement();
+        //kDebug() << "/ / / /SENDING EFFECT PARAM: " << e.attribute("type") << ", NAME_ " << e.attribute("tag");
+        if (e.attribute("type") == "simplekeyframe") {
+
+            QStringList values = e.attribute("keyframes").split(";", QString::SkipEmptyParts);
+            double factor = e.attribute("factor", "1").toDouble();
+            for (int j = 0; j < values.count(); j++) {
+                QString pos = values.at(j).section(":", 0, 0);
+                double val = values.at(j).section(":", 1, 1).toDouble() / factor;
+                values[j] = pos + "=" + QString::number(val);
+            }
+            // kDebug() << "/ / / /SENDING KEYFR:" << values;
+            parameters.addParam(e.attribute("name"), values.join(";"));
+            /*parameters.addParam(e.attribute("name"), e.attribute("keyframes").replace(":", "="));
+            parameters.addParam("max", e.attribute("max"));
+            parameters.addParam("min", e.attribute("min"));
+            parameters.addParam("factor", e.attribute("factor", "1"));*/
+        } else if (e.attribute("type") == "keyframe") {
+            kDebug() << "/ / / /SENDING KEYFR EFFECT TYPE";
+            parameters.addParam("keyframes", e.attribute("keyframes"));
+            parameters.addParam("max", e.attribute("max"));
+            parameters.addParam("min", e.attribute("min"));
+            parameters.addParam("factor", e.attribute("factor", "1"));
+            parameters.addParam("starttag", e.attribute("starttag", "start"));
+            parameters.addParam("endtag", e.attribute("endtag", "end"));
+        } else if (e.attribute("namedesc").contains(';')) {
+            QString format = e.attribute("format");
+            QStringList separators = format.split("%d", QString::SkipEmptyParts);
+            QStringList values = e.attribute("value").split(QRegExp("[,:;x]"));
+            QString neu;
+            QTextStream txtNeu(&neu);
+            if (values.size() > 0)
+                txtNeu << (int)values[0].toDouble();
+            for (int i = 0; i < separators.size() && i + 1 < values.size(); i++) {
+                txtNeu << separators[i];
+                txtNeu << (int)(values[i+1].toDouble());
+            }
+            parameters.addParam("start", neu);
+        } else {
+            if (e.attribute("factor", "1") != "1") {
+                double fact;
+                if (e.attribute("factor").startsWith('%')) {
+                    fact = ProfilesDialog::getStringEval(m_document->mltProfile(), e.attribute("factor"));
+                } else fact = e.attribute("factor", "1").toDouble();
+                parameters.addParam(e.attribute("name"), QString::number(e.attribute("value").toDouble() / fact));
+            } else {
+                parameters.addParam(e.attribute("name"), e.attribute("value"));
+            }
+        }
+    }
+    return parameters;
+}
\ No newline at end of file
index 4df0fdb1293d39f3ef2878108de90de7b027a537..87f8910b9904ef4c67e203d6ca590b1d72eda1db 100644 (file)
@@ -246,6 +246,11 @@ public slots:
     * @param cut true = cut, false = "uncut" */
     void slotRazorGroup(QList <ItemInfo> clips1, QList <ItemInfo> transitions1, QList <ItemInfo> clipsCut, QList <ItemInfo> transitionsCut, QList <ItemInfo> clips2, QList <ItemInfo> transitions2, GenTime cutPos, bool cut);
 
+    /** @brief Add en effect to a track.
+    * @param effect The new effect xml
+    * @param ix The track index */
+    void slotAddTrackEffect(const QDomElement effect, int ix);
+
 protected:
     virtual void drawBackground(QPainter * painter, const QRectF & rect);
     //virtual void drawForeground ( QPainter * painter, const QRectF & rect );
@@ -383,6 +388,9 @@ private:
     * @param cutPos The absolute position of the cut */
     void razorGroup(AbstractGroupItem *group, GenTime cutPos);
 
+    /** @brief Gets the effect parameters that will be passed to Mlt. */
+    EffectsParameterList getEffectArgs(const QDomElement effect);
+
 private slots:
     void slotRefreshGuides();
     void slotEnableRefresh();
index 3165a482829aa3f80ecc9698586fde3478f95733..063f4b8a9cd356df2063575542946d2fcb0e53f5 100644 (file)
@@ -31,6 +31,7 @@
 #include <QAction>
 #include <QTimer>
 #include <QColor>
+#include <QDomDocument>
 
 HeaderTrack::HeaderTrack(int index, TrackInfo info, int height, QWidget *parent) :
         QWidget(parent),
@@ -54,6 +55,8 @@ HeaderTrack::HeaderTrack(int index, TrackInfo info, int height, QWidget *parent)
     buttonLock->setChecked(info.isLocked);
     buttonLock->setToolTip(i18n("Lock track"));
 
+    setAcceptDrops(true);
+
     QPalette p = palette();
     KColorScheme scheme(p.currentColorGroup(), KColorScheme::Window);
     p.setColor(QPalette::Button, scheme.background(KColorScheme::ActiveBackground).color().darker(120));
@@ -140,6 +143,28 @@ void HeaderTrack::mouseDoubleClickEvent(QMouseEvent* event)
     QWidget::mouseDoubleClickEvent(event);
 }
 
+//virtual
+void HeaderTrack::dropEvent(QDropEvent * event)
+{
+    const QString effects = QString(event->mimeData()->data("kdenlive/effectslist"));
+    QDomDocument doc;
+    doc.setContent(effects, true);
+    const QDomElement e = doc.documentElement();
+    emit addTrackInfo(e, m_index);
+    /*if (scene() && !scene()->views().isEmpty()) {
+        event->accept();
+        CustomTrackView *view = (CustomTrackView *) scene()->views()[0];
+        if (view) view->slotAddEffect(e, m_info.startPos, track());
+    }*/
+}
+
+//virtual
+void HeaderTrack::dragEnterEvent(QDragEnterEvent *event)
+{
+    if (buttonLock->isChecked()) event->setAccepted(false);
+    else event->setAccepted(event->mimeData()->hasFormat("kdenlive/effectslist"));
+}
+
 void HeaderTrack::setSelectedIndex(int ix)
 {
     if (m_index == ix) {
index 907a0cd4cc078fc1c163e59a5e1f586bbe1196d5..0fdf3a511a4efcba688219c9d788c8717b2849e8 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <QContextMenuEvent>
 #include <QMenu>
+#include <QDomElement>
 
 #include "definitions.h"
 #include "ui_trackheader_ui.h"
@@ -41,6 +42,8 @@ protected:
     virtual void mousePressEvent(QMouseEvent * event);
     virtual void mouseDoubleClickEvent(QMouseEvent * event);
     virtual void contextMenuEvent(QContextMenuEvent * event);
+    virtual void dropEvent(QDropEvent * event);
+    virtual void dragEnterEvent(QDragEnterEvent *event);
 
 private:
     int m_index;
@@ -68,6 +71,7 @@ signals:
     void renameTrack(int, QString);
     void selectTrack(int);
     void configTrack(int);
+    void addTrackInfo(const QDomElement, int);
 };
 
 #endif
index ce99e4c85d5c2ef8f20965b89cea7e5de0aedba9..059faf0a64358fd4f655d49790da0fd5047f4d30 100644 (file)
@@ -2292,6 +2292,16 @@ bool Render::mltRemoveEffect(int track, GenTime position, QString index, bool up
     return success;
 }
 
+bool Render::mltAddTrackEffect(int track, EffectsParameterList params)
+{
+    Mlt::Service service(m_mltProducer->parent().get_service());
+    Mlt::Tractor tractor(service);
+    Mlt::Producer trackProducer(tractor.track(track));
+    Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
+    Mlt::Service trackService(trackPlaylist.get_service());
+    return mltAddEffect(trackService, params, 15000, true);
+}
+
 
 bool Render::mltAddEffect(int track, GenTime position, EffectsParameterList params, bool doRefresh)
 {
@@ -2311,18 +2321,22 @@ bool Render::mltAddEffect(int track, GenTime position, EffectsParameterList para
     Mlt::Service clipService(clip->get_service());
     m_isBlocked = true;
     int duration = clip->get_playtime();
-    bool updateIndex = false;
     if (doRefresh) {
         // Check if clip is visible in monitor
         int diff = trackPlaylist.clip_start(clipIndex) + duration - m_mltProducer->position();
         if (diff < 0 || diff > duration) doRefresh = false;
     }
     delete clip;
-
+    return mltAddEffect(clipService, params, duration, doRefresh);
+}
+    
+bool Render::mltAddEffect(Mlt::Service service, EffectsParameterList params, int duration, bool doRefresh)
+{
+    bool updateIndex = false;
     const int filter_ix = params.paramValue("kdenlive_ix").toInt();
     const QString region =  params.paramValue("region");
     int ct = 0;
-    Mlt::Filter *filter = clipService.filter(ct);
+    Mlt::Filter *filter = service.filter(ct);
     while (filter) {
         if (QString(filter->get("kdenlive_ix")).toInt() == filter_ix) {
             // A filter at that position already existed, so we will increase all indexes later
@@ -2330,19 +2344,19 @@ bool Render::mltAddEffect(int track, GenTime position, EffectsParameterList para
             break;
         }
         ct++;
-        filter = clipService.filter(ct);
+        filter = service.filter(ct);
     }
 
     if (params.paramValue("id") == "speed") {
         // special case, speed effect is not really inserted, we just update the other effects index (kdenlive_ix)
         ct = 0;
-        filter = clipService.filter(ct);
+        filter = service.filter(ct);
         while (filter) {
             if (QString(filter->get("kdenlive_ix")).toInt() >= filter_ix) {
                 if (updateIndex) filter->set("kdenlive_ix", QString(filter->get("kdenlive_ix")).toInt() + 1);
             }
             ct++;
-            filter = clipService.filter(ct);
+            filter = service.filter(ct);
         }
         m_isBlocked = false;
         if (doRefresh) refresh();
@@ -2353,13 +2367,13 @@ bool Render::mltAddEffect(int track, GenTime position, EffectsParameterList para
     // temporarily remove all effects after insert point
     QList <Mlt::Filter *> filtersList;
     ct = 0;
-    filter = clipService.filter(ct);
+    filter = service.filter(ct);
     while (filter) {
         if (QString(filter->get("kdenlive_ix")).toInt() >= filter_ix) {
             filtersList.append(filter);
-            clipService.detach(*filter);
+            service.detach(*filter);
         } else ct++;
-        filter = clipService.filter(ct);
+        filter = service.filter(ct);
     }
 
     // create filter
@@ -2410,7 +2424,7 @@ bool Render::mltAddEffect(int track, GenTime position, EffectsParameterList para
                 //kDebug() << "// ADDING KEYFRAME vals: " << min<<" / "<<max<<", "<<y1<<", factor: "<<factor;
                 filter->set(starttag, QString::number((min + y1) / factor).toUtf8().data());
                 filter->set(endtag, QString::number((min + y2) / factor).toUtf8().data());
-                clipService.attach(*filter);
+                service.attach(*filter);
                 offset = 1;
             }
         }
@@ -2471,7 +2485,7 @@ bool Render::mltAddEffect(int track, GenTime position, EffectsParameterList para
 
 
         // attach filter to the clip
-        clipService.attach(*filter);
+        service.attach(*filter);
     }
     delete[] filterId;
     delete[] filterTag;
@@ -2481,7 +2495,7 @@ bool Render::mltAddEffect(int track, GenTime position, EffectsParameterList para
         Mlt::Filter *filter = filtersList.at(i);
         if (updateIndex)
             filter->set("kdenlive_ix", QString(filter->get("kdenlive_ix")).toInt() + 1);
-        clipService.attach(*filter);
+        service.attach(*filter);
     }
     m_isBlocked = false;
     if (doRefresh) refresh();
index 3b51dc7a144c88d3823b32d2919d2f4729754117..5fbdb50727d92929f2d8e3dd16b72660d2880fc7 100644 (file)
@@ -205,6 +205,8 @@ Q_OBJECT public:
 
     /** @brief Adds an effect to a clip in MLT's playlist. */
     bool mltAddEffect(int track, GenTime position, EffectsParameterList params, bool doRefresh = true);
+    bool mltAddEffect(Mlt::Service service, EffectsParameterList params, int duration, bool doRefresh);
+    bool mltAddTrackEffect(int track, EffectsParameterList params);
 
     /** @brief Edits an effect parameters in MLT's playlist. */
     bool mltEditEffect(int track, GenTime position, EffectsParameterList params);
index 4efc9067860ebc7fc45bcb3866042f847076dcaf..2321374be76c49b44ae456c69798a8b751055afd 100644 (file)
@@ -557,6 +557,7 @@ void TrackView::slotRebuildTrackHeaders()
         connect(header, SIGNAL(insertTrack(int)), this, SIGNAL(insertTrack(int)));
         connect(header, SIGNAL(renameTrack(int, QString)), this, SLOT(slotRenameTrack(int, QString)));
         connect(header, SIGNAL(configTrack(int)), this, SIGNAL(configTrack(int)));
+       connect(header, SIGNAL(addTrackInfo(const QDomElement, int)), m_trackview, SLOT(slotAddTrackEffect(const QDomElement, int)));
         headers_container->layout()->addWidget(header);
     }
     frame = new QFrame(this);