From 60e5241f0536a04c5edd6487862d9364cf67f1c3 Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Mon, 11 Apr 2022 16:41:14 -0700 Subject: [PATCH] clip: fixed waveform issues with speed and in trimming --- app/node/block/clip/clip.cpp | 20 +++++++++++--------- app/node/block/clip/clip.h | 2 +- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/app/node/block/clip/clip.cpp b/app/node/block/clip/clip.cpp index b14fc2bb2..c61003ab9 100644 --- a/app/node/block/clip/clip.cpp +++ b/app/node/block/clip/clip.cpp @@ -110,7 +110,7 @@ void ClipBlock::set_length_and_media_in(const rational &length) if (!reverse()) { // Calculate media_in adjustment - rational proposed_media_in = SequenceToMediaTime(this->length() - length); + rational proposed_media_in = SequenceToMediaTime(this->length() - length, false, true); waveform_.TrimIn(proposed_media_in - media_in()); @@ -133,7 +133,7 @@ void ClipBlock::set_media_in(const rational &media_in) SetStandardValue(kMediaInInput, QVariant::fromValue(media_in)); } -rational ClipBlock::SequenceToMediaTime(const rational &sequence_time, bool ignore_reverse) const +rational ClipBlock::SequenceToMediaTime(const rational &sequence_time, bool ignore_reverse, bool ignore_speed) const { // These constants are not considered "values" per se, so we don't modify them if (sequence_time == RATIONAL_MIN || sequence_time == RATIONAL_MAX) { @@ -142,13 +142,15 @@ rational ClipBlock::SequenceToMediaTime(const rational &sequence_time, bool igno rational media_time = sequence_time; - double speed_value = speed(); - if (qIsNull(speed_value)) { - // Effectively holds the frame at the in point - media_time = 0; - } else if (!qFuzzyCompare(speed_value, 1.0)) { - // Multiply time - media_time = rational::fromDouble(media_time.toDouble() * speed_value); + if (!ignore_speed) { + double speed_value = speed(); + if (qIsNull(speed_value)) { + // Effectively holds the frame at the in point + media_time = 0; + } else if (!qFuzzyCompare(speed_value, 1.0)) { + // Multiply time + media_time = rational::fromDouble(media_time.toDouble() * speed_value); + } } if (reverse() && !ignore_reverse) { diff --git a/app/node/block/clip/clip.h b/app/node/block/clip/clip.h index 831a3b779..300f3408f 100644 --- a/app/node/block/clip/clip.h +++ b/app/node/block/clip/clip.h @@ -133,7 +133,7 @@ protected: virtual void Hash(QCryptographicHash &hash, const NodeGlobals &globals, const VideoParams& video_params) const override; private: - rational SequenceToMediaTime(const rational& sequence_time, bool ignore_reverse = false) const; + rational SequenceToMediaTime(const rational& sequence_time, bool ignore_reverse = false, bool ignore_speed = false) const; rational MediaToSequenceTime(const rational& media_time) const;