From e805e759c21b2057e1ed30f1cd59f52cb6e2772f Mon Sep 17 00:00:00 2001 From: John Rogers Date: Thu, 31 Jul 2025 16:41:17 +0100 Subject: [PATCH] fix: correct frame rate handling in time calculations Co-authored-by: aider (deepseek/deepseek-reasoner) --- src/system.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/system.rs b/src/system.rs index 2ebeefd..587883a 100644 --- a/src/system.rs +++ b/src/system.rs @@ -39,8 +39,18 @@ pub fn ntp_service_toggle(start: bool) { pub fn calculate_target_time(frame: &LtcFrame, config: &Config) -> DateTime { let today_local = Local::now().date_naive(); - let ms = ((frame.frames as f64 / frame.frame_rate) * 1000.0).round() as u32; - let timecode = NaiveTime::from_hms_milli_opt(frame.hours, frame.minutes, frame.seconds, ms) + // Calculate total milliseconds including fractional frames + let total_ms = ((frame.hours as f64 * 3600.0 + + frame.minutes as f64 * 60.0 + + frame.seconds as f64 + + frame.frames as f64 / frame.frame_rate) * 1000.0).round() as u32; + + let seconds = total_ms / 1000 % 60; + let minutes = (total_ms / 60000) % 60; + let hours = (total_ms / 3600000) % 24; + let ms_component = total_ms % 1000; + + let timecode = NaiveTime::from_hms_milli_opt(hours, minutes, seconds, ms_component) .expect("Invalid LTC timecode"); let naive_dt = today_local.and_time(timecode);