From 3fa25e91b9ed746b9a65fc6ff0b5fc4388097459 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 10 Jan 2025 01:35:42 +0100 Subject: Fix invalid return values from fade() causing various odd effects (#2932). --- src/lib/video_content.cc | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'src/lib') diff --git a/src/lib/video_content.cc b/src/lib/video_content.cc index 6177ba7fe..392dc4052 100644 --- a/src/lib/video_content.cc +++ b/src/lib/video_content.cc @@ -435,16 +435,19 @@ VideoContent::fade(shared_ptr film, ContentTime time) const double const vfr = _parent->active_video_frame_rate(film); - auto const ts = _parent->trim_start(); + auto const trim_start = _parent->trim_start(); auto const fade_in_time = ContentTime::from_frames(fade_in(), vfr); - if ((time - ts) < fade_in_time) { - return double(ContentTime(time - ts).get()) / fade_in_time.get(); + /* time after the trimmed start of the content */ + auto const time_after_start = time - trim_start; + if (fade_in_time.get() && time_after_start < fade_in_time) { + return std::max(0.0, static_cast(time_after_start.get()) / fade_in_time.get()); } auto const fade_out_time = ContentTime::from_frames(fade_out(), vfr); - auto fade_out_start = ContentTime::from_frames(length(), vfr) - _parent->trim_end() - fade_out_time; - if (time >= fade_out_start) { - return 1 - double(ContentTime(time - fade_out_start).get()) / fade_out_time.get(); + auto const end = ContentTime::from_frames(length(), vfr) - _parent->trim_end(); + auto const time_after_end_fade_start = time - (end - fade_out_time); + if (time_after_end_fade_start > ContentTime()) { + return std::max(0.0, 1 - static_cast(time_after_end_fade_start.get()) / fade_out_time.get()); } return {}; -- cgit v1.2.3