[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