]> git.nihav.org Git - nihav-encoder.git/commitdiff
fix target timebase calculation master
authorKostya Shishkov <kostya.shishkov@gmail.com>
Fri, 10 Oct 2025 16:53:10 +0000 (18:53 +0200)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Fri, 10 Oct 2025 16:53:10 +0000 (18:53 +0200)
src/transcoder.rs

index f5520f5a5ffd21a7b07510514d6508f3907b3476..253a590f819012fb1e69ef1bd84bf94f21353925 100644 (file)
@@ -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;