[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kdenlive/Applications/15.12] src/timeline: Fix transitions left after track deletion
From: Jean-Baptiste Mardelle <jb () kdenlive ! org>
Date: 2015-12-22 21:01:58
Message-ID: E1aBU4E-0006EX-Rp () scm ! kde ! org
[Download RAW message or body]
Git commit d0a38e91fa43810b7c22082e022e9729e218fb72 by Jean-Baptiste Mardelle.
Committed on 22/12/2015 at 21:01.
Pushed by mardelle into branch 'Applications/15.12'.
Fix transitions left after track deletion
CCBUG: 355380
M +3 -0 src/timeline/customtrackview.cpp
M +17 -0 src/timeline/transitionhandler.cpp
M +1 -0 src/timeline/transitionhandler.h
http://commits.kde.org/kdenlive/d0a38e91fa43810b7c22082e022e9729e218fb72
diff --git a/src/timeline/customtrackview.cpp b/src/timeline/customtrackview.cpp
index c4d2919..393147c 100644
--- a/src/timeline/customtrackview.cpp
+++ b/src/timeline/customtrackview.cpp
@@ -3285,6 +3285,9 @@ void CustomTrackView::removeTrack(int ix)
}
}
}
+
+ //Manually remove all transitions issued from track ix, otherwise MLT will \
relocate it to another track + \
m_timeline->transitionHandler->deleteTrackTransitions(ix);
// Delete track in MLT playlist
tractor->remove_track(ix);
diff --git a/src/timeline/transitionhandler.cpp b/src/timeline/transitionhandler.cpp
index c748456..4106396 100644
--- a/src/timeline/transitionhandler.cpp
+++ b/src/timeline/transitionhandler.cpp
@@ -285,6 +285,23 @@ void TransitionHandler::deleteTransition(QString tag, int \
/*a_track*/, int b_tra //if (m_isBlocked == 0) m_mltConsumer->set("refresh", 1);
}
+void TransitionHandler::deleteTrackTransitions(int ix)
+{
+ QScopedPointer<Mlt::Field> field(m_tractor->field());
+ mlt_service nextservice = mlt_service_get_producer(field->get_service());
+ mlt_service_type type = mlt_service_identify( nextservice );
+ while (type == transition_type) {
+ Mlt::Transition transition((mlt_transition) nextservice);
+ nextservice = mlt_service_producer(nextservice);
+ int currentTrack = transition.get_b_track();
+ if (ix == currentTrack) {
+ field->disconnect_service(transition);
+ }
+ if (nextservice == NULL) break;
+ type = mlt_service_identify(nextservice );
+ }
+}
+
bool TransitionHandler::moveTransition(QString type, int startTrack, int newTrack, \
int newTransitionTrack, GenTime oldIn, GenTime oldOut, GenTime newIn, GenTime newOut) \
{ int new_in = (int)newIn.frames(m_fps);
diff --git a/src/timeline/transitionhandler.h b/src/timeline/transitionhandler.h
index 4558d70..58d5fe7 100644
--- a/src/timeline/transitionhandler.h
+++ b/src/timeline/transitionhandler.h
@@ -44,6 +44,7 @@ public:
void updateTransition(QString oldTag, QString tag, int a_track, int b_track, \
GenTime in, GenTime out, QDomElement xml, bool force = false);
void updateTransitionParams(QString type, int a_track, int b_track, GenTime in, \
GenTime out, QDomElement xml);
void deleteTransition(QString tag, int a_track, int b_track, GenTime in, GenTime \
out, QDomElement xml, bool refresh = true); + void deleteTrackTransitions(int ix);
bool moveTransition(QString type, int startTrack, int newTrack, int \
newTransitionTrack, GenTime oldIn, GenTime oldOut, GenTime newIn, \
GenTime newOut);
QList <TransitionInfo> mltInsertTrack(int ix, const QString &name, bool \
videoTrack);
void duplicateTransitionOnPlaylist(int in, int out, QString tag, QDomElement \
xml, int a_track, int b_track, Mlt::Field *field);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic