}
}
-fn retrieve_packets(transcoder: &mut Transcoder, mux: &mut Muxer, vdata_size: &mut usize, adata_size: &mut usize, end: bool) -> bool {
+fn retrieve_packets(transcoder: &mut Transcoder, mux: &mut Muxer, mux_quirks: MuxerQuirks, vdata_size: &mut usize, adata_size: &mut usize, end: bool) -> bool {
while let Some(pkt) = transcoder.queue.get_packet(&mut transcoder.debug) {
transcoder.debug_log(DebugLog::MUX, &format!(" Got output packet for stream {} ts {:?}/{:?}", pkt.get_stream().get_id(), pkt.ts.pts, pkt.ts.dts));
if transcoder.end != NATimePoint::None && !pkt.ts.less_than(transcoder.end) {
transcoder.debug_log(DebugLog::GENERAL, "Hit end time boundary");
return false;
}
+ if mux_quirks.is_global_pal() && pkt.ts.pts != Some(0) &&
+ pkt.side_data.iter().any(|sd| matches!(sd, NASideData::Palette(true, _))) {
+ println!("Palette change encountered while muxer does not support that!");
+ return false;
+ }
let pkt_size = pkt.get_buffer().len();
match pkt.get_stream().get_media_type() {
StreamType::Video => { *vdata_size += pkt_size; },
if let Some(pts) = pkt.ts.pts {
last_known_time = Some(NATimeInfo::rescale_ts(pts, pkt.ts.tb_num, pkt.ts.tb_den, 1, 1000));
}
- if mux_quirks.is_global_pal() && pkt.ts.pts != Some(0) &&
- pkt.side_data.iter().any(|sd| matches!(sd, NASideData::Palette(true, _))) {
- println!("Palette change encountered while muxer does not support that!");
- break 'main_loop;
- }
if let Some(ref mut dec_ctx) = transcoder.decoders[src_id] {
let ret = dec_ctx.decoder.decode(&mut dec_ctx.dsupp, &pkt);
if let Some(ref mut dbg) = transcoder.debug {
time = Instant::now();
}
- if !retrieve_packets(&mut transcoder, &mut mux, &mut vdata_size, &mut adata_size, false) {
+ if !retrieve_packets(&mut transcoder, &mut mux, mux_quirks, &mut vdata_size, &mut adata_size, false) {
break;
}
}
}
transcoder.debug_log(DebugLog::GENERAL, "Flushing encoded packets");
- retrieve_packets(&mut transcoder, &mut mux, &mut vdata_size, &mut adata_size, true);
+ retrieve_packets(&mut transcoder, &mut mux, mux_quirks, &mut vdata_size, &mut adata_size, true);
if transcoder.verbose > 0 {
println!();