]> git.sesse.net Git - kdenlive/commitdiff
Fix several audio fade bugs, including
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 18 Nov 2008 12:36:46 +0000 (12:36 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 18 Nov 2008 12:36:46 +0000 (12:36 +0000)
http://www.kdenlive.org/mantis/view.php?id=258

svn path=/branches/KDE4/; revision=2714

effects/fadein.xml
effects/fadeout.xml
src/customtrackview.cpp
src/effectstackedit.cpp
src/effectstackview.cpp

index 1a1c4df4002d63ea1d55e6f1bcaf4b9e626dcfda..6906f01db03a0405dc9ec09bdfc71e0a63d36603 100644 (file)
@@ -6,7 +6,7 @@
        <parameter type="fixed" name="in" max="0" min="0" default="0">
                <name></name>
        </parameter>
-       <parameter type="position" name="out" max="15000" min="0" default="75">
+       <parameter type="position" name="out" max="90000" min="0" default="75">
                <name>Duration</name>
        </parameter>
        <parameter type="fixed" name="gain" max="0" min="0" default="0">
index 8f81a9c5a1f2e14f9141f5c54bf0a550a805ba2f..c33c4655087abedfa91693a097f9c62e12842069 100644 (file)
@@ -3,12 +3,12 @@
        <name>Fade out</name>
        <description>Fade in audio track</description>
        <author></author>
-       <parameter type="fixed" name="in" max="0" min="0" default="0">
-               <name></name>
-       </parameter>
-       <parameter type="position" name="out" max="15000" min="0" default="75">
+       <parameter type="position" name="in" max="0" min="0" default="75">
                <name>Duration</name>
        </parameter>
+       <parameter type="fixed" name="out" max="90000" min="0" default="0">
+               <name></name>
+       </parameter>
        <parameter type="fixed" name="gain" max="1" min="1" default="1">
                <name>Start Gain</name>
        </parameter>
index 99321d46dfe98e7ecf5150c8935a54b699f2f452..019e0df880d627128b4423ddb72dc3f6b86f05f8 100644 (file)
@@ -1437,7 +1437,7 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) {
             resizeinfo.track = m_scene->m_tracksList.count() - resizeinfo.track;
             bool success = m_document->renderer()->mltResizeClipStart(resizeinfo, m_dragItem->startPos() - m_dragItemInfo.startPos);
             if (success) {
-                updateClipFade((ClipItem *) m_dragItem);
+                updateClipFade(static_cast <ClipItem *>(m_dragItem));
                 ResizeClipCommand *command = new ResizeClipCommand(this, m_dragItemInfo, info, false);
                 m_commandStack->push(command);
             } else {
@@ -1461,6 +1461,7 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) {
             if (success) {
                 ResizeClipCommand *command = new ResizeClipCommand(this, m_dragItemInfo, info, false);
                 m_commandStack->push(command);
+                updateClipFade(static_cast <ClipItem *>(m_dragItem), true);
             } else {
                 m_dragItem->resizeEnd((int) m_dragItemInfo.endPos.frames(m_document->fps()));
                 emit displayMessage(i18n("Error when resizing clip"), ErrorMessage);
@@ -1797,8 +1798,8 @@ void CustomTrackView::updateClipFade(ClipItem * item, bool updateFadeOut) {
         int end = item->fadeIn();
         if (end != 0) {
             // there is a fade in effect
-            QStringList clipeffects = item->effectNames();
             int effectPos = item->hasEffect("volume", "fadein");
+            if (effectPos == -1) return;
             QDomElement oldeffect = item->effectAt(effectPos);
             int start = item->cropStart().frames(m_document->fps());
             end += start;
@@ -1807,21 +1808,25 @@ void CustomTrackView::updateClipFade(ClipItem * item, bool updateFadeOut) {
             QHash <QString, QString> effectParams = item->getEffectArgs(oldeffect);
             if (!m_document->renderer()->mltEditEffect(m_scene->m_tracksList.count() - item->track(), item->startPos(), effectParams))
                 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);
         }
     } else {
         int start = item->fadeOut();
         if (start != 0) {
             // there is a fade in effect
-            QStringList clipeffects = item->effectNames();
             int effectPos = item->hasEffect("volume", "fadeout");
+            if (effectPos == -1) return;
             QDomElement oldeffect = item->effectAt(effectPos);
             int end = (item->duration() - item->cropStart()).frames(m_document->fps());
             start = end - start;
             EffectsList::setParameter(oldeffect, "in", QString::number(start));
             EffectsList::setParameter(oldeffect, "out", QString::number(end));
             QHash <QString, QString> effectParams = item->getEffectArgs(oldeffect);
-            if (m_document->renderer()->mltEditEffect(m_scene->m_tracksList.count() - item->track(), item->startPos(), effectParams))
+            if (!m_document->renderer()->mltEditEffect(m_scene->m_tracksList.count() - item->track(), item->startPos(), effectParams))
                 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);
         }
     }
 }
index b5e5e214eee0050b0c7d33229ee8ed10baca2999..82d45e782786317b97dbfde5d5c53c686ea2aa53 100644 (file)
@@ -190,7 +190,14 @@ void EffectStackEdit::transferParamDesc(const QDomElement& d, int in, int out) {
         } else if (type == "position") {
             Ui::Positionval_UI *pval = new Ui::Positionval_UI;
             pval->setupUi(toFillin);
-            pval->krestrictedline->setText(m_timecode.getTimecodeFromFrames(value.toInt()));
+            int pos = value.toInt();
+            if (d.attribute("id") == "fadein") {
+                pos = pos - m_in;
+            } else if (d.attribute("id") == "fadeout") {
+                // fadeout position starts from clip end
+                pos = m_out - (pos - m_in);
+            }
+            pval->krestrictedline->setText(m_timecode.getTimecodeFromFrames(pos));
             connect(pval->krestrictedline, SIGNAL(editingFinished()), this, SLOT(collectAllParameters()));
             pval->label->setText(paramName);
             valueItems[paramName + "position"] = pval;
@@ -366,8 +373,13 @@ void EffectStackEdit::collectAllParameters() {
             namenode.item(i) = geom->getParamDesc();
         } else if (type == "position") {
             KRestrictedLine *line = ((Ui::Positionval_UI*)valueItems[paramName+"position"])->krestrictedline;
-            setValue = QString::number(m_timecode.getFrameCount(line->text(), KdenliveSettings::project_fps()));
-            kDebug() << "// NEW POSITION: " << setValue << "(" << line->text() << " PARAM: " << paramName + "position";
+            int pos = m_timecode.getFrameCount(line->text(), KdenliveSettings::project_fps());
+            if (params.attribute("id") == "fadein") {
+                pos += m_in;
+            } else if (params.attribute("id") == "fadeout") {
+                pos = m_out - (pos - m_in);
+            }
+            setValue = QString::number(pos);
         } else if (type == "wipe") {
             Ui::Wipeval_UI *wp = (Ui::Wipeval_UI*)valueItems[paramName];
             wipeInfo info;
index 2b7626a2feecc80aef5e5370458ca4176421481a..939a58f93dcf73dd9cf25b246bcd23ab9713487e 100644 (file)
@@ -30,7 +30,7 @@
 #include "effectslist.h"
 #include "clipitem.h"
 #include "mainwindow.h"
-
+#include "kdenlivesettings.h"
 
 EffectStackView::EffectStackView(QWidget *parent)
         : QWidget(parent) {
@@ -179,7 +179,7 @@ void EffectStackView::setupListView(int ix) {
         }
     }
     if (clipref->effectsCount() == 0) {
-        emit transferParamDesc(QDomElement(), 0, 100);
+        emit transferParamDesc(QDomElement(), 0, 0);
         ui.buttonDel->setEnabled(false);
         ui.buttonSave->setEnabled(false);
         ui.buttonReset->setEnabled(false);
@@ -203,7 +203,7 @@ void EffectStackView::slotItemSelectionChanged() {
     bool isChecked = false;
     if (hasItem && ui.effectlist->currentItem()->checkState() == Qt::Checked) isChecked = true;
     if (hasItem && ui.effectlist->currentItem()->isSelected()) {
-        emit transferParamDesc(clipref->effectAt(activeRow), 0, 100);//minx max frame
+        emit transferParamDesc(clipref->effectAt(activeRow), clipref->cropStart().frames(KdenliveSettings::project_fps()), clipref->cropDuration().frames(KdenliveSettings::project_fps()));//minx max frame
     }
     if (clipref) clipref->setSelectedEffect(activeRow);
     ui.buttonDel->setEnabled(hasItem);
@@ -247,7 +247,7 @@ void EffectStackView::slotResetEffect() {
     }
     if (!dom.isNull()) {
         dom.setAttribute("kdenlive_ix", old.attribute("kdenlive_ix"));
-        emit transferParamDesc(dom, 0, 100);//minx max frame
+        emit transferParamDesc(dom, clipref->cropStart().frames(KdenliveSettings::project_fps()), clipref->cropDuration().frames(KdenliveSettings::project_fps()));//minx max frame
         emit updateClipEffect(clipref, old, dom, activeRow);
     }
 }