* Allow use of different ffmpeg preset for 1st and 2nd render pass.
* Notes widget: context menu now allows to insert clickable timecode to make easy reference to some place in the project.
+ * Do not duplicate effect stack after split audio but move audio effects only.
* Fix issues related to the usage of comma as numeric separator in some locales.
* Fix build on GNU/kFreeBSD.
* Fix cursor not visible in title widget. (http://kdenlive.org/mantis/view.php?id=2231)
if (clip->parentItem()) {
emit displayMessage(i18n("Cannot split audio of grouped clips"), ErrorMessage);
} else {
- new SplitAudioCommand(this, clip->track(), clip->startPos(), splitCommand);
+ EffectsList effects;
+ effects.clone(clip->effectList());
+ new SplitAudioCommand(this, clip->track(), clip->startPos(), effects, splitCommand);
}
}
}
}
}
-void CustomTrackView::doSplitAudio(const GenTime &pos, int track, bool split)
+void CustomTrackView::doSplitAudio(const GenTime &pos, int track, EffectsList effects, bool split)
{
ClipItem *clip = getClipItemAt(pos, track);
if (clip == NULL) {
}
audioClip->setSelected(true);
audioClip->setAudioOnly(true);
+
+ // keep video effects, move audio effects to audio clip
+ int videoIx = 0;
+ int audioIx = 0;
+ for (int i = 0; i < effects.count(); ++i) {
+ if (effects.at(i).attribute("type") == "audio") {
+ deleteEffect(m_document->tracksCount() - track, pos, clip->effectAt(videoIx));
+ audioIx++;
+ } else {
+ deleteEffect(freetrack, pos, audioClip->effectAt(audioIx));
+ videoIx++;
+ }
+ }
+
groupSelectedItems(false, true);
}
}
ItemInfo info = clip->info();
deleteClip(clp->info());
clip->setVideoOnly(false);
+
if (!m_document->renderer()->mltUpdateClipProducer(m_document->tracksCount() - info.track, info.startPos.frames(m_document->fps()), clip->baseClip()->producer(info.track))) {
emit displayMessage(i18n("Cannot update clip (time: %1, track: %2)", info.startPos.frames(m_document->fps()), info.track), ErrorMessage);
}
+
+ // re-add audio effects
+ for (int i = 0; i < effects.count(); ++i) {
+ if (effects.at(i).attribute("type") == "audio") {
+ addEffect(m_document->tracksCount() - track, pos, effects.at(i));
+ }
+ }
+
break;
}
}
* @param pos Position of the clip to split
* @param track Track of the clip
* @param split Split or unsplit */
- void doSplitAudio(const GenTime &pos, int track, bool split);
+ void doSplitAudio(const GenTime &pos, int track, EffectsList effects, bool split);
void setVideoOnly();
void setAudioOnly();
void setAudioAndVideo();
#include <KLocale>
-SplitAudioCommand::SplitAudioCommand(CustomTrackView *view, const int track, const GenTime &pos, QUndoCommand * parent) :
+SplitAudioCommand::SplitAudioCommand(CustomTrackView *view, const int track, const GenTime &pos, EffectsList effects, QUndoCommand * parent) :
QUndoCommand(parent),
m_view(view),
m_pos(pos),
- m_track(track)
+ m_track(track),
+ m_effects(effects)
{
setText(i18n("Split audio"));
}
// virtual
void SplitAudioCommand::undo()
{
-// kDebug()<<"---- undoing action";
- m_view->doSplitAudio(m_pos, m_track, false);
+ m_view->doSplitAudio(m_pos, m_track, m_effects, false);
}
// virtual
void SplitAudioCommand::redo()
{
- kDebug() << "---- redoing action";
- m_view->doSplitAudio(m_pos, m_track, true);
+ m_view->doSplitAudio(m_pos, m_track, m_effects, true);
}
class SplitAudioCommand : public QUndoCommand
{
public:
- SplitAudioCommand(CustomTrackView *view, const int track, const GenTime &pos, QUndoCommand * parent = 0);
+ SplitAudioCommand(CustomTrackView *view, const int track, const GenTime &pos, EffectsList effects, QUndoCommand * parent = 0);
virtual void undo();
virtual void redo();
CustomTrackView *m_view;
const GenTime m_pos;
const int m_track;
+ EffectsList m_effects;
};
#endif