}
pub fn get_packet(&mut self) -> Option<NAPacket> {
if self.sync {
- for queue in self.packets.iter() {
+ let mut all_with_time = true;
+ let mut min_ts = None;
+ let mut min_sn = 0;
+ for (streamno, queue) in self.packets.iter().enumerate() {
if queue.is_empty() {
if !self.had_warning && self.packets.len() > 1 {
for q in self.packets.iter() {
}
return None;
}
+ if let Some(pts) = queue[0].ts.pts {
+ let stream = queue[0].get_stream();
+ let millis = NATimeInfo::ts_to_time(pts, 1000, stream.tb_num, stream.tb_den);
+ if min_ts.is_none() || min_ts > Some(millis) {
+ min_ts = Some(millis);
+ min_sn = streamno;
+ }
+ } else {
+ all_with_time = false;
+ }
+ }
+ if all_with_time && min_ts.is_some() {
+ self.packets[min_sn].pop_front()
+ } else {
+ self.get_last_packet()
}
-// todo return packet with minimum timestamp
- self.get_last_packet()
} else {
self.get_last_packet()
}