]> git.sesse.net Git - kdenlive/commitdiff
Another fix in clip resize
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 2 Oct 2009 12:06:07 +0000 (12:06 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 2 Oct 2009 12:06:07 +0000 (12:06 +0000)
svn path=/trunk/kdenlive/; revision=3979

src/customtrackview.cpp
src/renderer.cpp

index 805ab3eb2e59f40d1018bcc77c12f215bb0b1d72..51887871eec419637eb78c81808eb63944479923 100644 (file)
@@ -4507,13 +4507,15 @@ void CustomTrackView::setOutPoint()
     ItemInfo startInfo = clip->info();
     ItemInfo endInfo = clip->info();
     endInfo.endPos = GenTime(m_cursorPos, m_document->fps());
-    if (endInfo.endPos <= startInfo.startPos || endInfo.endPos > startInfo.startPos + clip->maxDuration() - startInfo.cropStart) {
+    CLIPTYPE type = (CLIPTYPE) static_cast <ClipItem *> (clip)->clipType();
+    if (endInfo.endPos <= startInfo.startPos || (type != IMAGE && type != COLOR && type != TEXT && endInfo.endPos > startInfo.startPos + clip->maxDuration() - startInfo.cropStart)) {
         // Check for invalid resize
         emit displayMessage(i18n("Invalid action"), ErrorMessage);
         return;
     } else if (endInfo.endPos > startInfo.endPos) {
-        int length = m_document->renderer()->mltGetSpaceLength(endInfo.endPos, m_document->tracksCount() - startInfo.track, false);
-        if ((clip->type() == TRANSITIONWIDGET && itemCollision(clip, endInfo) == true) || (clip->type() == AVWIDGET && length < (endInfo.endPos - startInfo.endPos).frames(m_document->fps()))) {
+        int length = m_document->renderer()->mltGetSpaceLength(startInfo.endPos, m_document->tracksCount() - startInfo.track, false);
+        if ((clip->type() == TRANSITIONWIDGET && itemCollision(clip, endInfo) == true) || (clip->type() == AVWIDGET && length != -1 && length < (endInfo.endPos - startInfo.endPos).frames(m_document->fps()))) {
+            kDebug()<<" RESIZE ERROR, BLNK: "<<length<<", RESIZE: "<<(endInfo.endPos - startInfo.endPos).frames(m_document->fps());
             emit displayMessage(i18n("Invalid action"), ErrorMessage);
             return;
         }
index 27f84e5ace1898748792f0203ccd8e87609861c1..93d2a2b8633ef0edb159f3285d772dc0f215e71e 100644 (file)
@@ -1786,12 +1786,12 @@ int Render::mltGetSpaceLength(const GenTime pos, int track, bool fromBlankStart)
 {
     if (!m_mltProducer) {
         kDebug() << "PLAYLIST NOT INITIALISED //////";
-        return -1;
+        return 0;
     }
     Mlt::Producer parentProd(m_mltProducer->parent());
     if (parentProd.get_producer() == NULL) {
         kDebug() << "PLAYLIST BROKEN, CANNOT INSERT CLIP //////";
-        return -1;
+        return 0;
     }
 
     Mlt::Service service(parentProd.get_service());
@@ -1801,7 +1801,11 @@ int Render::mltGetSpaceLength(const GenTime pos, int track, bool fromBlankStart)
     Mlt::Producer trackProducer(tractor.track(track));
     Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
     int clipIndex = trackPlaylist.get_clip_index_at(insertPos);
-    if (!trackPlaylist.is_blank(clipIndex)) return -1;
+    if (clipIndex == trackPlaylist.count()) {
+        // We are after the end of the playlist
+        return -1;
+    }
+    if (!trackPlaylist.is_blank(clipIndex)) return 0;
     if (fromBlankStart) return trackPlaylist.clip_length(clipIndex);
     return trackPlaylist.clip_length(clipIndex) + trackPlaylist.clip_start(clipIndex) - insertPos;
 }