diff --git a/app/node/block/transition/transition.cpp b/app/node/block/transition/transition.cpp index 2d91c7d47..2603f0acd 100644 --- a/app/node/block/transition/transition.cpp +++ b/app/node/block/transition/transition.cpp @@ -219,7 +219,7 @@ NodeValueTable TransitionBlock::Value(const QString &output, NodeValueDatabase & void TransitionBlock::InvalidateCache(const TimeRange &range, const QString &from, int element, InvalidateCacheOptions options) { - TimeRange r; + TimeRange r = range; if (from == kOutBlockInput || from == kInBlockInput) { Block *n = dynamic_cast(GetConnectedNode(from)); diff --git a/app/node/output/track/track.h b/app/node/output/track/track.h index 1234d160e..82367cf44 100644 --- a/app/node/output/track/track.h +++ b/app/node/output/track/track.h @@ -62,22 +62,31 @@ public: static rational TransformTimeForBlock(const Block* block, const rational& time) { + if (time == RATIONAL_MAX || time == RATIONAL_MIN) { + return time; + } + return time - block->in(); } static TimeRange TransformRangeForBlock(const Block* block, const TimeRange& range) { - return range - block->in(); + return TimeRange(TransformTimeForBlock(block, range.in()), TransformTimeForBlock(block, range.out())); } static rational TransformTimeFromBlock(const Block* block, const rational& time) { + if (time == RATIONAL_MAX || time == RATIONAL_MIN) { + return time; + } + return time + block->in(); } static TimeRange TransformRangeFromBlock(const Block* block, const TimeRange& range) { return range + block->in(); + return TimeRange(TransformTimeFromBlock(block, range.in()), TransformTimeFromBlock(block, range.out())); } const double& GetTrackHeight() const;