class AbstractClipItem;
class AbstractGroupItem;
class Transition;
+class AudioCorrelation;
class CustomTrackView : public QGraphicsView
{
void configTracks(QList <TrackInfo> trackInfos);
int cursorPos();
void checkAutoScroll();
- void moveClip(const ItemInfo &start, const ItemInfo &end, bool refresh);
+ /**
+ Move the clip at \c start to \c end.
+
+ If \c out_actualEnd is not NULL, it will be set to the position the clip really ended up at.
+ For example, attempting to move a clip to t = -1 s will actually move it to t = 0 s.
+ */
+ bool moveClip(const ItemInfo &start, const ItemInfo &end, bool refresh, ItemInfo *out_actualEnd = NULL);
void moveGroup(QList <ItemInfo> startClip, QList <ItemInfo> startTransition, const GenTime &offset, const int trackOffset, bool reverseMove = false);
/** move transition, startPos = (old start, old end), endPos = (new start, new end) */
void moveTransition(const ItemInfo &start, const ItemInfo &end, bool refresh);
void addMarker(const QString &id, const GenTime &pos, const QString &comment);
void setScale(double scaleFactor, double verticalScale);
void deleteClip(const QString &clipId);
+ /** @brief Add effect to current clip */
void slotAddEffect(QDomElement effect, GenTime pos, int track);
void slotAddGroupEffect(QDomElement effect, AbstractGroupItem *group);
void addEffect(int track, GenTime pos, QDomElement effect);
void deleteEffect(int track, GenTime pos, QDomElement effect);
- void updateEffect(int track, GenTime pos, QDomElement insertedEffect, int ix, bool refreshEffectStack = false);
- void moveEffect(int track, GenTime pos, int oldPos, int newPos);
+ void updateEffect(int track, GenTime pos, QDomElement insertedEffect, bool refreshEffectStack = false);
+ /** @brief Enable / disable a list of effects */
+ void updateEffectState(int track, GenTime pos, QList <int> effectIndexes, bool disable, bool updateEffectStack);
+ void moveEffect(int track, GenTime pos, QList <int> oldPos, QList <int> newPos);
void addTransition(ItemInfo transitionInfo, int endTrack, QDomElement params, bool refresh);
void deleteTransition(ItemInfo transitionInfo, int endTrack, QDomElement params, bool refresh);
void updateTransition(int track, GenTime pos, QDomElement oldTransition, QDomElement transition, bool updateTransitionWidget);
/** @brief Creates SplitAudioCommands for selected clips. */
void splitAudio();
+ /// Define which clip to take as reference for automatic audio alignment
+ void setAudioAlignReference();
+
+ /// Automatically align the currently selected clips to synchronize their audio with the reference's audio
+ void alignAudio();
+
/** @brief Seperates the audio of a clip to a audio track.
* @param pos Position of the clip to split
* @param track Track of the clip
void moveCursorPos(int delta);
void updateCursorPos();
void slotDeleteEffect(ClipItem *clip, int track, QDomElement effect, bool affectGroup = true);
- void slotChangeEffectState(ClipItem *clip, int track, int effectPos, bool disable);
- void slotChangeEffectPosition(ClipItem *clip, int track, int currentPos, int newPos);
+ void slotChangeEffectState(ClipItem *clip, int track, QList <int> effectIndexes, bool disable);
+ void slotChangeEffectPosition(ClipItem *clip, int track, QList <int> currentPos, int newPos);
void slotUpdateClipEffect(ClipItem *clip, int track, QDomElement oldeffect, QDomElement effect, int ix, bool refreshEffectStack = true);
void slotUpdateClipRegion(ClipItem *clip, int ix, QString region);
void slotRefreshEffects(ClipItem *clip);
QWaitCondition m_producerNotReady;
KStatefulBrush m_activeTrackBrush;
+ AudioCorrelation *m_audioCorrelator;
+ ClipItem *m_audioAlignmentReference;
+
/** stores the state of the control modifier during mouse press.
* Will then be used to identify whether we resize a group or only one item of it. */
bool m_controlModifier;
void adjustEffects(ClipItem *item, ItemInfo oldInfo, QUndoCommand *command);
/** @brief Prepare an add clip command for an effect */
- void processEffect(ClipItem *item, QDomElement effect, QUndoCommand *effectCommand);
+ void processEffect(ClipItem *item, QDomElement effect, int offset, QUndoCommand *effectCommand);
+
+ /** @brief Get effect parameters ready for MLT*/
+ void adjustEffectParameters(EffectsParameterList ¶meters, QDomNodeList params, const QString &prefix = QString());
private slots:
void slotRefreshGuides();