]> git.sesse.net Git - kdenlive/commitdiff
Fix crash and various problems with 1 frame clips:
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Thu, 17 Sep 2009 13:32:09 +0000 (13:32 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Thu, 17 Sep 2009 13:32:09 +0000 (13:32 +0000)
http://www.kdenlive.org/mantis/view.php?id=1150

svn path=/trunk/kdenlive/; revision=3907

src/customtrackview.cpp
src/renderer.cpp

index 17d6cf9ea175b8cc08b6679c8cd50ce64fda3557..0ff1f3415de22f04a019e7d708f2e1b2e4ca8879 100644 (file)
@@ -1349,7 +1349,7 @@ void CustomTrackView::slotRefreshEffects(ClipItem *clip)
 
 void CustomTrackView::addEffect(int track, GenTime pos, QDomElement effect)
 {
-    ClipItem *clip = getClipItemAt((int)pos.frames(m_document->fps()) + 1, m_document->tracksCount() - track);
+    ClipItem *clip = getClipItemAt((int)pos.frames(m_document->fps()), m_document->tracksCount() - track);
     if (clip) {
         // Special case: speed effect
         if (effect.attribute("id") == "speed") {
@@ -1379,7 +1379,7 @@ void CustomTrackView::deleteEffect(int track, GenTime pos, QDomElement effect)
     QString index = effect.attribute("kdenlive_ix");
     // Special case: speed effect
     if (effect.attribute("id") == "speed") {
-        ClipItem *clip = getClipItemAt((int)pos.frames(m_document->fps()) + 1, m_document->tracksCount() - track);
+        ClipItem *clip = getClipItemAt((int)pos.frames(m_document->fps()), m_document->tracksCount() - track);
         if (clip) {
             ItemInfo info = clip->info();
             doChangeClipSpeed(info, 1.0, clip->speed(), 1, clip->baseClip()->getId());
@@ -1393,7 +1393,7 @@ void CustomTrackView::deleteEffect(int track, GenTime pos, QDomElement effect)
         emit displayMessage(i18n("Problem deleting effect"), ErrorMessage);
         return;
     }
-    ClipItem *clip = getClipItemAt((int)pos.frames(m_document->fps()) + 1, m_document->tracksCount() - track);
+    ClipItem *clip = getClipItemAt((int)pos.frames(m_document->fps()), m_document->tracksCount() - track);
     if (clip) {
         clip->deleteEffect(index);
         emit clipItemSelected(clip);
@@ -1509,7 +1509,7 @@ void CustomTrackView::slotDeleteEffect(ClipItem *clip, QDomElement effect)
 
 void CustomTrackView::updateEffect(int track, GenTime pos, QDomElement insertedEffect, int ix, bool triggeredByUser)
 {
-    ClipItem *clip = getClipItemAt((int)pos.frames(m_document->fps()) + 1, m_document->tracksCount() - track);
+    ClipItem *clip = getClipItemAt((int)pos.frames(m_document->fps()), m_document->tracksCount() - track);
     QDomElement effect = insertedEffect.cloneNode().toElement();
     if (clip) {
         // Special case: speed effect
@@ -1565,7 +1565,7 @@ void CustomTrackView::updateEffect(int track, GenTime pos, QDomElement insertedE
 
 void CustomTrackView::moveEffect(int track, GenTime pos, int oldPos, int newPos)
 {
-    ClipItem *clip = getClipItemAt((int)pos.frames(m_document->fps()) + 1, m_document->tracksCount() - track);
+    ClipItem *clip = getClipItemAt((int)pos.frames(m_document->fps()), m_document->tracksCount() - track);
     if (clip && !clip->effectAt(newPos - 1).isNull() && !clip->effectAt(oldPos - 1).isNull()) {
         QDomElement act = clip->effectAt(newPos - 1).cloneNode().toElement();
         QDomElement before = clip->effectAt(oldPos - 1).cloneNode().toElement();
@@ -1664,7 +1664,7 @@ void CustomTrackView::cutClip(ItemInfo info, GenTime cutTime, bool cut)
         // uncut clip
 
         ClipItem *item = getClipItemAt((int) info.startPos.frames(m_document->fps()), info.track);
-        ClipItem *dup = getClipItemAt((int) cutTime.frames(m_document->fps()) + 1, info.track);
+        ClipItem *dup = getClipItemAt((int) cutTime.frames(m_document->fps()), info.track);
         if (!item || !dup || item == dup) {
             emit displayMessage(i18n("Cannot find clip to uncut"), ErrorMessage);
             m_blockRefresh = false;
index d38d63f561901970aabaeb98c21339a02fc40f89..57e2ef85120ef844da7d3423fdb95acc61f37e2f 100644 (file)
@@ -2665,9 +2665,9 @@ void Render::mltUpdateClipProducer(int track, int pos, Mlt::Producer *prod)
     Mlt::Tractor tractor(service);
     Mlt::Producer trackProducer(tractor.track(track));
     Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
-    int clipIndex = trackPlaylist.get_clip_index_at(pos + 1);
+    int clipIndex = trackPlaylist.get_clip_index_at(pos);
     Mlt::Producer *clipProducer = trackPlaylist.replace_with_blank(clipIndex);
-    if (clipProducer->is_blank()) {
+    if (clipProducer == NULL || clipProducer->is_blank()) {
         kDebug() << "// ERROR UPDATING CLIP PROD";
         delete clipProducer;
         mlt_service_unlock(m_mltConsumer->get_service());