From 9a0e16f504594f4b4b5e316014eee7a6eee7d65c Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Fri, 18 Nov 2022 10:20:03 -0800 Subject: [PATCH] move clamping code from clip to track Fixes severe regression related to audio transitions --- app/node/block/clip/clip.cpp | 24 +----------------------- app/node/block/transition/transition.cpp | 8 ++------ app/node/output/track/track.cpp | 9 ++++++++- 3 files changed, 11 insertions(+), 30 deletions(-) diff --git a/app/node/block/clip/clip.cpp b/app/node/block/clip/clip.cpp index 70e9a7304..7ce334697 100644 --- a/app/node/block/clip/clip.cpp +++ b/app/node/block/clip/clip.cpp @@ -464,29 +464,7 @@ TimeRange ClipBlock::InputTimeAdjustment(const QString& input, int element, cons Q_UNUSED(element) if (input == kBufferIn) { - rational in = input_time.in(); - rational out = input_time.out(); - - if (clamp) { - rational minimum = 0; - rational maximum = length(); - - if (in_transition_) { - minimum -= in_transition_->length(); - } - - if (out_transition_) { - maximum += out_transition_->length(); - } - - in = std::max(in, minimum); - out = std::min(out, maximum); - } - - in = SequenceToMediaTime(in); - out = SequenceToMediaTime(out); - - return TimeRange(in, out); + return TimeRange(SequenceToMediaTime(input_time.in()), SequenceToMediaTime(input_time.out())); } return super::InputTimeAdjustment(input, element, input_time, clamp); diff --git a/app/node/block/transition/transition.cpp b/app/node/block/transition/transition.cpp index c78796393..1b05f3ba7 100644 --- a/app/node/block/transition/transition.cpp +++ b/app/node/block/transition/transition.cpp @@ -292,12 +292,8 @@ TimeRange TransitionBlock::InputTimeAdjustment(const QString &input, int element if (input == kInBlockInput || input == kOutBlockInput) { Block* block = dynamic_cast(GetConnectedOutput(input)); if (block) { - TimeRange range = input_time; - if (clamp) { - range.set_range(std::max(rational(0), range.in()), std::min(this->length(), range.out())); - } - range = range + in() - block->in(); - return range; + // Retransform time as if it came from the track + return input_time + in() - block->in(); } } diff --git a/app/node/output/track/track.cpp b/app/node/output/track/track.cpp index 7afde43ea..884ad5b65 100644 --- a/app/node/output/track/track.cpp +++ b/app/node/output/track/track.cpp @@ -152,7 +152,14 @@ TimeRange Track::InputTimeAdjustment(const QString& input, int element, const Ti int cache_index = GetCacheIndexFromArrayIndex(element); if (cache_index > -1) { - return TransformRangeForBlock(blocks_.at(cache_index), input_time); + TimeRange r = input_time; + Block *b = blocks_.at(cache_index); + + if (clamp) { + r.set_range(std::max(r.in(), b->in()), std::min(r.out(), b->out())); + } + + return TransformRangeForBlock(b, r); } }