From: Kostya Shishkov Date: Fri, 10 Oct 2025 16:53:10 +0000 (+0200) Subject: fix target timebase calculation X-Git-Url: https://git.nihav.org/?a=commitdiff_plain;h=6219f8fb18dfaaf8cbfc02dbffe917d6d8aeb96d;p=nihav-encoder.git fix target timebase calculation --- 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;