]> git.sesse.net Git - kdenlive/blobdiff - src/renderer.cpp
Fix tracks issues (load & save of tracks with hidden audio or video), also fix
[kdenlive] / src / renderer.cpp
index 21300187fb2bb266293dc47adf50f62fd83d62f5..dc8a2ed81031b7038943b0ad4bc7446afe94519a 100644 (file)
@@ -2031,7 +2031,7 @@ void Render::mltChangeTrackState(int track, bool mute, bool blind) {
     Mlt::Service service(m_mltProducer->parent().get_service());
     Mlt::Tractor tractor(service);
     Mlt::Producer trackProducer(tractor.track(track));
-    Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
+
     if (mute) {
         if (blind) trackProducer.set("hide", 3);
         else trackProducer.set("hide", 2);
@@ -2605,11 +2605,10 @@ void Render::mltSavePlaylist() {
 }
 
 QList <Mlt::Producer *> Render::producersList() {
-    QList <Mlt::Producer *> prods;
+    QList <Mlt::Producer *> prods = QList <Mlt::Producer *> ();
     QStringList ids;
     Mlt::Service service(m_mltProducer->parent().get_service());
     Mlt::Tractor tractor(service);
-    Mlt::Field *field = tractor.field();
 
     int trackNb = tractor.count();
     for (int t = 1; t < trackNb; t++) {
@@ -2630,7 +2629,7 @@ QList <Mlt::Producer *> Render::producersList() {
     return prods;
 }
 
-void Render::mltInsertTrack(int ix) {
+void Render::mltInsertTrack(int ix, bool videoTrack) {
     blockSignals(true);
     m_isBlocked = true;
 
@@ -2640,20 +2639,27 @@ void Render::mltInsertTrack(int ix) {
     if (service.type() != tractor_type) kWarning() << "// TRACTOR PROBLEM";
 
     Mlt::Tractor tractor(service);
+
     Mlt::Playlist *playlist = new Mlt::Playlist();
     int ct = tractor.count();
-    kDebug() << "// TRACK INSERT: " << ix << ", MAX: " << ct;
+    // kDebug() << "// TRACK INSERT: " << ix << ", MAX: " << ct;
     int pos = ix;
     if (pos < ct) {
         Mlt::Producer *prodToMove = new Mlt::Producer(tractor.track(pos));
         tractor.set_track(*playlist, pos);
+        Mlt::Producer newProd(tractor.track(pos));
+        if (!videoTrack) newProd.set("hide", 1);
         pos++;
         for (; pos <= ct; pos++) {
             Mlt::Producer *prodToMove2 = new Mlt::Producer(tractor.track(pos));
             tractor.set_track(*prodToMove, pos);
             prodToMove = prodToMove2;
         }
-    } else tractor.set_track(*playlist, ix);
+    } else {
+        tractor.set_track(*playlist, ix);
+        Mlt::Producer newProd(tractor.track(ix));
+        if (!videoTrack) newProd.set("hide", 1);
+    }
 
     // Move transitions
     mlt_service serv = m_mltProducer->parent().get_service();