From: Jean-Baptiste Mardelle Date: Tue, 18 Nov 2008 12:36:46 +0000 (+0000) Subject: Fix several audio fade bugs, including X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=b7f8784570081908aee225669b47d84cac4026c2;p=kdenlive Fix several audio fade bugs, including http://www.kdenlive.org/mantis/view.php?id=258 svn path=/branches/KDE4/; revision=2714 --- diff --git a/effects/fadein.xml b/effects/fadein.xml index 1a1c4df4..6906f01d 100644 --- a/effects/fadein.xml +++ b/effects/fadein.xml @@ -6,7 +6,7 @@ - + Duration diff --git a/effects/fadeout.xml b/effects/fadeout.xml index 8f81a9c5..c33c4655 100644 --- a/effects/fadeout.xml +++ b/effects/fadeout.xml @@ -3,12 +3,12 @@ Fade out Fade in audio track - - - - + Duration + + + Start Gain diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 99321d46..019e0df8 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -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 (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 (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 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 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); } } } diff --git a/src/effectstackedit.cpp b/src/effectstackedit.cpp index b5e5e214..82d45e78 100644 --- a/src/effectstackedit.cpp +++ b/src/effectstackedit.cpp @@ -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; diff --git a/src/effectstackview.cpp b/src/effectstackview.cpp index 2b7626a2..939a58f9 100644 --- a/src/effectstackview.cpp +++ b/src/effectstackview.cpp @@ -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); } }