From 4ac2b0261ed6a97d66afd1b902030d596019f01e Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Mon, 1 Jun 2009 18:48:18 +0000 Subject: [PATCH] No more duration limit for color, image and title clips svn path=/trunk/kdenlive/; revision=3474 --- src/abstractclipitem.cpp | 5 ----- src/abstractclipitem.h | 1 - src/clipdurationdialog.cpp | 12 +++++++----- src/clipitem.cpp | 13 ++----------- src/clipproperties.cpp | 1 + src/docclipbase.cpp | 5 +++-- src/renderer.cpp | 11 +++++++---- 7 files changed, 20 insertions(+), 28 deletions(-) diff --git a/src/abstractclipitem.cpp b/src/abstractclipitem.cpp index 07e6a54a..4521e9d7 100644 --- a/src/abstractclipitem.cpp +++ b/src/abstractclipitem.cpp @@ -194,11 +194,6 @@ GenTime AbstractClipItem::maxDuration() const return m_maxDuration; } -void AbstractClipItem::setMaxDuration(const GenTime &max) -{ - m_maxDuration = max; -} - QPainterPath AbstractClipItem::upperRectPart(QRectF br) { QPainterPath roundRectPathUpper; diff --git a/src/abstractclipitem.h b/src/abstractclipitem.h index 09b02b54..b3a9f460 100644 --- a/src/abstractclipitem.h +++ b/src/abstractclipitem.h @@ -59,7 +59,6 @@ public: virtual double fps() const; virtual GenTime maxDuration() const; virtual void setCropStart(GenTime pos); - virtual void setMaxDuration(const GenTime &max); protected: int m_track; diff --git a/src/clipdurationdialog.cpp b/src/clipdurationdialog.cpp index cfcef5e6..b1a06c65 100644 --- a/src/clipdurationdialog.cpp +++ b/src/clipdurationdialog.cpp @@ -94,8 +94,10 @@ void ClipDurationDialog::slotCheckDuration() int dur = m_tc.getFrameCount(m_view.clip_duration->text(), m_fps); GenTime start(pos, m_fps); GenTime duration(dur, m_fps); - GenTime maxDuration = m_max == GenTime() ? start + m_clip->maxDuration() : qMin(m_max, start + m_clip->maxDuration()); - if (start + duration > maxDuration) { + GenTime maxDuration; + if (m_clip->maxDuration() == GenTime()) maxDuration = m_max; + else maxDuration = m_max == GenTime() ? start + m_clip->maxDuration() : qMin(m_max, start + m_clip->maxDuration()); + if (maxDuration != GenTime() && start + duration > maxDuration) { m_view.clip_duration->setText(m_tc.getTimecode(maxDuration - start, m_fps)); } } @@ -107,7 +109,7 @@ void ClipDurationDialog::slotCheckCrop() GenTime duration(dur, m_fps); GenTime cropStart(crop, m_fps); GenTime maxDuration = m_clip->maxDuration(); - if (cropStart + duration > maxDuration) { + if (maxDuration != GenTime() && cropStart + duration > maxDuration) { m_view.crop_position->setText(m_tc.getTimecode(maxDuration - duration, m_fps)); } } @@ -132,7 +134,7 @@ void ClipDurationDialog::slotDurUp() { int duration = m_tc.getFrameCount(m_view.clip_duration->text(), m_fps); int crop = m_tc.getFrameCount(m_view.crop_position->text(), m_fps); - if (duration + crop > m_clip->maxDuration().frames(m_fps)) return; + if (m_clip->maxDuration() != GenTime() && duration + crop > m_clip->maxDuration().frames(m_fps)) return; duration ++; m_view.clip_duration->setText(m_tc.getTimecode(GenTime(duration, m_fps), m_fps)); } @@ -149,7 +151,7 @@ void ClipDurationDialog::slotCropUp() { int crop = m_tc.getFrameCount(m_view.crop_position->text(), m_fps); int duration = m_tc.getFrameCount(m_view.clip_duration->text(), m_fps); - if (duration + crop > m_clip->maxDuration().frames(m_fps)) return; + if (m_clip->maxDuration() != GenTime() && duration + crop > m_clip->maxDuration().frames(m_fps)) return; crop ++; m_view.crop_position->setText(m_tc.getTimecode(GenTime(crop, m_fps), m_fps)); } diff --git a/src/clipitem.cpp b/src/clipitem.cpp index 4f93bef4..5a8ab59b 100644 --- a/src/clipitem.cpp +++ b/src/clipitem.cpp @@ -76,15 +76,6 @@ ClipItem::ClipItem(DocClipBase *clip, ItemInfo info, double fps, double speed, b setAcceptDrops(true); m_audioThumbReady = clip->audioThumbCreated(); - /* - m_cropStart = xml.attribute("in", 0).toInt(); - m_maxDuration = xml.attribute("duration", 0).toInt(); - if (m_maxDuration == 0) m_maxDuration = xml.attribute("out", 0).toInt() - m_cropStart; - - if (duration != -1) m_cropDuration = duration; - else m_cropDuration = m_maxDuration;*/ - - setFlags(QGraphicsItem::ItemClipsToShape | QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); setAcceptsHoverEvents(true); connect(this , SIGNAL(prepareAudioThumb(double, int, int, int)) , this, SLOT(slotPrepareAudioThumb(double, int, int, int))); @@ -407,7 +398,7 @@ void ClipItem::refreshClip(bool checkDuration) if (checkDuration && (m_maxDuration != m_clip->maxDuration())) { m_maxDuration = m_clip->maxDuration(); if (m_clipType != IMAGE && m_clipType != TEXT && m_clipType != COLOR) { - if (m_cropStart + m_cropDuration > m_maxDuration) { + if (m_maxDuration != GenTime() && m_cropStart + m_cropDuration > m_maxDuration) { // Clip duration changed, make sure to stay in correct range if (m_cropStart > m_maxDuration) { m_cropStart = GenTime(); @@ -1106,7 +1097,7 @@ void ClipItem::resizeStart(int posx, double /*speed*/) void ClipItem::resizeEnd(int posx, double /*speed*/, bool updateKeyFrames) { const int max = (startPos() - cropStart() + maxDuration()).frames(m_fps); - if (posx > max) posx = max; + if (posx > max && maxDuration() != GenTime()) posx = max; if (posx == endPos().frames(m_fps)) return; //kDebug() << "// NEW POS: " << posx << ", OLD END: " << endPos().frames(m_fps); const int previous = (cropStart() + duration()).frames(m_fps); diff --git a/src/clipproperties.cpp b/src/clipproperties.cpp index adb51fa4..8f1224fe 100644 --- a/src/clipproperties.cpp +++ b/src/clipproperties.cpp @@ -505,6 +505,7 @@ void ClipProperties::parseFolder() void ClipProperties::slotCheckMaxLength() { + if (m_clip->maxDuration() == GenTime()) return; int duration = m_tc.getFrameCount(m_view.clip_duration->text(), m_fps); if (duration > m_clip->maxDuration().frames(m_fps)) { m_view.clip_duration->setText(m_tc.getTimecode(m_clip->maxDuration(), m_fps)); diff --git a/src/docclipbase.cpp b/src/docclipbase.cpp index b64517df..d9c329a0 100644 --- a/src/docclipbase.cpp +++ b/src/docclipbase.cpp @@ -230,8 +230,9 @@ const GenTime &DocClipBase::duration() const const GenTime DocClipBase::maxDuration() const { if (m_clipType == COLOR || m_clipType == IMAGE || m_clipType == TEXT || (m_clipType == SLIDESHOW && m_properties.value("loop") == "1")) { - const GenTime dur(15000, KdenliveSettings::project_fps()); - return dur; + /*const GenTime dur(15000, KdenliveSettings::project_fps()); + return dur;*/ + return GenTime(); } return m_duration; } diff --git a/src/renderer.cpp b/src/renderer.cpp index 4bfa2609..65207372 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -2180,17 +2180,20 @@ bool Render::mltResizeClipEnd(ItemInfo info, GenTime clipDuration) return false; } int clipIndex = trackPlaylist.get_clip_index_at((int) info.startPos.frames(m_fps)); - kDebug() << "// SELECTED CLIP START: " << trackPlaylist.clip_start(clipIndex); + //kDebug() << "// SELECTED CLIP START: " << trackPlaylist.clip_start(clipIndex); Mlt::Producer *clip = trackPlaylist.get_clip(clipIndex); int previousStart = clip->get_in(); - int previousDuration = trackPlaylist.clip_length(clipIndex) - 1; int newDuration = (int) clipDuration.frames(m_fps) - 1; + int diff = newDuration - trackPlaylist.clip_length(clipIndex) - 1; + if (newDuration > clip->get_length()) { + clip->parent().set("length", newDuration + 1); + clip->set("length", newDuration + 1); + } trackPlaylist.resize_clip(clipIndex, previousStart, newDuration + previousStart); trackPlaylist.consolidate_blanks(0); // skip to next clip clipIndex++; - int diff = newDuration - previousDuration; - kDebug() << "//////// RESIZE CLIP: " << clipIndex << "( pos: " << info.startPos.frames(25) << "), DIFF: " << diff << ", CURRENT DUR: " << previousDuration << ", NEW DUR: " << newDuration << ", IX: " << clipIndex << ", MAX: " << trackPlaylist.count(); + //kDebug() << "//////// RESIZE CLIP: " << clipIndex << "( pos: " << info.startPos.frames(25) << "), DIFF: " << diff << ", CURRENT DUR: " << previousDuration << ", NEW DUR: " << newDuration << ", IX: " << clipIndex << ", MAX: " << trackPlaylist.count(); if (diff > 0) { // clip was made longer, trim next blank if there is one. if (clipIndex < trackPlaylist.count()) { -- 2.39.2