]> git.sesse.net Git - kdenlive/commitdiff
Fix problems when changing duration (from end) of clip with negative crop from start
authorTill Theato <root@ttill.de>
Sun, 12 Sep 2010 08:33:35 +0000 (08:33 +0000)
committerTill Theato <root@ttill.de>
Sun, 12 Sep 2010 08:33:35 +0000 (08:33 +0000)
svn path=/trunk/kdenlive/; revision=4873

src/abstractclipitem.cpp
src/customtrackview.cpp
src/customtrackview.h
src/renderer.cpp

index 2046a6cbde58619f39a0b74af79cd96597ecc7cc..6a406e45d18e6df6d0db1c977da0af743ca46a19 100644 (file)
@@ -190,6 +190,7 @@ void AbstractClipItem::resizeEnd(int posx)
     }
 
     m_info.cropDuration += durationDiff;
+    m_info.endPos += durationDiff;
 
     setRect(0, 0, cropDuration().frames(m_fps) - 0.02, rect().height());
     if (durationDiff > GenTime()) {
index 041a0922542e7270caced0aebe5de0a99f3ff8dd..1d73e133bd91d607dcf89684fdbe9740a3a8eb8c 100644 (file)
@@ -4499,7 +4499,7 @@ void CustomTrackView::prepareResizeClipEnd(AbstractClipItem* item, ItemInfo oldI
     if (item->type() == AVWIDGET) {
         ItemInfo resizeinfo = info;
         resizeinfo.track = m_document->tracksCount() - resizeinfo.track;
-        bool success = m_document->renderer()->mltResizeClipEnd(resizeinfo, resizeinfo.endPos - resizeinfo.startPos);
+        bool success = m_document->renderer()->mltResizeClipEnd(resizeinfo, resizeinfo.cropDuration);
         if (success) {
             // Check if there is an automatic transition on that clip (lower track)
             Transition *tr = getTransitionItemAtEnd(oldInfo.endPos, oldInfo.track);
index fdfdc798c0053c119a600510d54228d4672e2c48..adc68714f02fc6adf768114421be90a3b287e266 100644 (file)
@@ -398,9 +398,7 @@ private:
 
     /** @brief Updates @param item's pan and zoom effect after resize or cut.
      * @param item clip whose pan and zoom effect should be updated
-     * @param cutPos (optional) if clip was cut, cut position relative to the original's clip position
-     * 
-     */
+     * @param cutPos (optional) if clip was cut, cut position relative to the original's clip position */
     void updatePanZoom(ClipItem *item, GenTime cutPos = GenTime());
 
 private slots:
index 8ad09f5cc77abccbf8684fefda4ed7f655da5a66..56fccbbe1cc185a7aae76ddf9f850a77663d3b67 100644 (file)
@@ -2941,15 +2941,22 @@ bool Render::mltResizeClipEnd(ItemInfo info, GenTime clipDuration)
     int clipIndex = trackPlaylist.get_clip_index_at((int) info.startPos.frames(m_fps));
     //kDebug() << "// SELECTED CLIP START: " << trackPlaylist.clip_start(clipIndex);
     Mlt::Producer *clip = trackPlaylist.get_clip(clipIndex);
+
     int previousStart = clip->get_in();
     int newDuration = (int) clipDuration.frames(m_fps) - 1;
-    int currentOut = (int)(info.cropStart + info.cropDuration).frames(m_fps) - 1;
     int diff = newDuration - (trackPlaylist.clip_length(clipIndex) - 1);
+
+    int currentOut;
+    if (info.cropStart < GenTime())
+        currentOut = newDuration - info.cropStart.frames(m_fps);
+    else
+        currentOut = newDuration + previousStart;
     if (currentOut > clip->get_length()) {
         clip->parent().set("length", currentOut + 1);
         clip->parent().set("out", currentOut);
         clip->set("length", currentOut + 1);
     }
+
     /*if (newDuration > clip->get_out()) {
         clip->parent().set_in_and_out(0, newDuration + 1);
         clip->set_in_and_out(0, newDuration + 1);