}
}
-fn retrieve_packets(transcoder: &mut Transcoder, mux: &mut Muxer, vdata_size: &mut usize, adata_size: &mut usize) -> bool {
+fn retrieve_packets(transcoder: &mut Transcoder, mux: &mut Muxer, vdata_size: &mut usize, adata_size: &mut usize, end: bool) -> bool {
while let Some(pkt) = transcoder.queue.get_packet() {
if transcoder.end != NATimePoint::None && !pkt.ts.less_than(transcoder.end) {
return false;
return false;
}
}
+ if end {
+ while let Some(pkt) = transcoder.queue.get_last_packet() {
+ if transcoder.end != NATimePoint::None && !pkt.ts.less_than(transcoder.end) {
+ return false;
+ }
+ let pkt_size = pkt.get_buffer().len();
+ match pkt.get_stream().get_media_type() {
+ StreamType::Video => { *vdata_size += pkt_size; },
+ StreamType::Audio => { *adata_size += pkt_size; },
+ _ => {},
+ };
+ if mux.mux_frame(pkt).is_err() {
+ println!("error muxing packet");
+ return false;
+ }
+ }
+ }
true
}
},
};
- if !retrieve_packets(&mut transcoder, &mut mux, &mut vdata_size, &mut adata_size) {
+ if !retrieve_packets(&mut transcoder, &mut mux, &mut vdata_size, &mut adata_size, false) {
break;
}
}
};
}
- retrieve_packets(&mut transcoder, &mut mux, &mut vdata_size, &mut adata_size);
+ retrieve_packets(&mut transcoder, &mut mux, &mut vdata_size, &mut adata_size, true);
if transcoder.verbose > 0 {
println!();