From 6219f8fb18dfaaf8cbfc02dbffe917d6d8aeb96d Mon Sep 17 00:00:00 2001 From: Kostya Shishkov Date: Fri, 10 Oct 2025 18:53:10 +0200 Subject: [PATCH] fix target timebase calculation --- src/transcoder.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/transcoder.rs b/src/transcoder.rs index f5520f5..253a590 100644 --- a/src/transcoder.rs +++ b/src/transcoder.rs @@ -271,10 +271,10 @@ impl EncoderInterface for VideoEncodeContext { let ref_ts = frm.get_time_information(); let new_pts = if let Some(ts) = ref_ts.pts { - Some(NATimeInfo::ts_to_time(ts, u64::from(self.tb_den), ref_ts.tb_num, ref_ts.tb_den)) + Some(NATimeInfo::ts_to_time(ts, u64::from(self.tb_den), ref_ts.tb_num, ref_ts.tb_den) / u64::from(self.tb_num)) } else { None }; let new_duration = if let Some(dur) = ref_ts.duration { - Some(NATimeInfo::ts_to_time(dur, u64::from(self.tb_den), ref_ts.tb_num, ref_ts.tb_den)) + Some(NATimeInfo::ts_to_time(dur, u64::from(self.tb_den), ref_ts.tb_num, ref_ts.tb_den) / u64::from(self.tb_num)) } else { None }; let ts = NATimeInfo::new(new_pts, None, new_duration, self.tb_num, self.tb_den); let mut cfrm = NAFrame::new(ts, frm.frame_type, frm.key, frm.get_info(), cbuf); @@ -287,7 +287,7 @@ impl EncoderInterface for VideoEncodeContext { if self.cfr && new_pts.is_some() { let cur_ts = new_pts.unwrap_or_default(); let mut cur_lts = *last_ts; - let mut next_lts = *last_ts + u64::from(self.tb_num); + let mut next_lts = *last_ts + 1; let mut had_frame = false; if cur_ts > cur_lts && (cur_ts - cur_lts) / u64::from(self.tb_den) > 16 { println!("Gap over 16 seconds between consequent frames, that's too much"); @@ -300,7 +300,7 @@ impl EncoderInterface for VideoEncodeContext { queue.queue_packet(pkt); } cur_lts = next_lts; - next_lts += u64::from(self.tb_num); + next_lts += 1; had_frame = true; } converted = true; -- 2.39.5