[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kdenlive/Applications/16.12] src/timeline: Workaround timeline crash caused by now fixed MLT issue 
From:       Jean-Baptiste Mardelle <null () kde ! org>
Date:       2017-02-05 22:03:19
Message-ID: E1caUtz-0008J9-Mi () code ! kde ! org
[Download RAW message or body]

Git commit 885fb4d0eb1224cd7f25eb2c42228433ca16fb9e by Jean-Baptiste Mardelle.
Committed on 05/02/2017 at 22:03.
Pushed by mardelle into branch 'Applications/16.12'.

Workaround timeline crash caused by now fixed MLT issue (could be triggered by \
editing a title clip): \
https://github.com/mltframework/mlt/commit/bf2749ab998446f13ba20c8cbc33a8c4d1c36963

M  +2    -3    src/timeline/timeline.cpp
M  +7    -12   src/timeline/track.cpp

https://commits.kde.org/kdenlive/885fb4d0eb1224cd7f25eb2c42228433ca16fb9e

diff --git a/src/timeline/timeline.cpp b/src/timeline/timeline.cpp
index e17154ed3..b60ba6101 100644
--- a/src/timeline/timeline.cpp
+++ b/src/timeline/timeline.cpp
@@ -947,7 +947,6 @@ void Timeline::reloadTrack(ItemInfo info, bool includeLastFrame)
 
 int Timeline::loadTrack(int ix, int offset, Mlt::Playlist &playlist, int start, int \
end, bool updateReferences) {  // parse track
-    Mlt::ClipInfo *info = new Mlt::ClipInfo();
     double fps = m_doc->fps();
     if (end == -1)
         end = playlist.count();
@@ -957,7 +956,8 @@ int Timeline::loadTrack(int ix, int offset, Mlt::Playlist \
&playlist, int start,  if (playlist.is_blank(i)) {
             continue;
         }
-        playlist.clip_info(i, info);
+        // TODO: playlist::clip_info(i, info) crashes on MLT < 6.6.0, so use variant \
until MLT 6.6.x is required +        QScopedPointer \
<Mlt::ClipInfo>info(playlist.clip_info(i));  Mlt::Producer *clip = info->cut;
         // Found a clip
         QString idString = info->producer->get("id");
@@ -1034,7 +1034,6 @@ int Timeline::loadTrack(int ix, int offset, Mlt::Playlist \
&playlist, int start,  // parse clip effects
         getEffects(*clip, item);
     }
-    delete info;
     return playlist.get_length();
 }
 
diff --git a/src/timeline/track.cpp b/src/timeline/track.cpp
index a77386adb..3d1e555e5 100644
--- a/src/timeline/track.cpp
+++ b/src/timeline/track.cpp
@@ -349,7 +349,6 @@ QList <ItemInfo> Track::replaceAll(const QString &id, \
Mlt::Producer *original, M  Mlt::Producer *trackProducer = NULL;
     Mlt::Producer *audioTrackProducer = NULL;
     QList <ItemInfo> replaced;
-    Mlt::ClipInfo *info = new Mlt::ClipInfo();
     for (int i = 0; i < m_playlist.count(); i++) {
         if (m_playlist.is_blank(i)) continue;
         QScopedPointer<Mlt::Producer> p(m_playlist.get_clip(i));
@@ -360,10 +359,9 @@ QList <ItemInfo> Track::replaceAll(const QString &id, \
Mlt::Producer *original, M  continue;
             }
             // master clip used, only notify for update
-            m_playlist.clip_info(i, info);
             ItemInfo cInfo;
-            cInfo.startPos = GenTime(info->start, fps());
-            cInfo.endPos = GenTime(info->start + info->frame_count, fps());
+            cInfo.startPos = GenTime(m_playlist.clip_start(i), fps());
+            cInfo.endPos = cInfo.startPos + GenTime(m_playlist.clip_length(i), \
fps());  cInfo.track = m_index;
             replaced << cInfo;
             continue;
@@ -419,7 +417,9 @@ QList <ItemInfo> Track::replaceAll(const QString &id, \
Mlt::Producer *original, M  }
         if (cut) {
             Clip(*cut).addEffects(*p);
-            m_playlist.clip_info(i, info);
+            ItemInfo cInfo;
+            cInfo.startPos = GenTime(m_playlist.clip_start(i), fps());
+            cInfo.endPos = cInfo.startPos + GenTime(m_playlist.clip_length(i), \
fps());  m_playlist.remove(i);
             m_playlist.insert(*cut, i);
             m_playlist.consolidate_blanks();
@@ -428,15 +428,11 @@ QList <ItemInfo> Track::replaceAll(const QString &id, \
Mlt::Producer *original, M  // Video is hidden for this track, nothing visible
                 continue;
             }
-            ItemInfo cInfo;
-            cInfo.startPos = GenTime(info->start, fps());
-            cInfo.endPos = GenTime(info->start + info->frame_count, fps());
             cInfo.track = m_index;
             replaced << cInfo;
         }
     }
     delete trackProducer;
-    delete info;
     delete audioTrackProducer;
     return replaced;
 }
@@ -988,12 +984,12 @@ QList <QPoint> Track::visibleClips()
         return clips;
     }
     QPoint current;
-    Mlt::ClipInfo *info = new Mlt::ClipInfo();
     for (int i = 0; i < m_playlist.count(); i++) {
         if (m_playlist.is_blank(i)) continue;
 
         // get producer, check if it has video
-        m_playlist.clip_info(i, info);
+        // TODO: playlist::clip_info(i, info) crashes on MLT < 6.6.0, so use variant \
until MLT 6.6.x is required +        QScopedPointer \
<Mlt::ClipInfo>info(m_playlist.clip_info(i));  Mlt::Producer *clip = info->producer;
         QString service = clip->get("mlt_service");
         if (service.contains(QStringLiteral("avformat"))) {
@@ -1018,7 +1014,6 @@ QList <QPoint> Track::visibleClips()
     }
     if (!current.isNull())
         clips << current;
-    delete info;
     return clips;
 }
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic