From 0aa1fb1e6ffd66abdb7c7d3ba903079e98ca23d7 Mon Sep 17 00:00:00 2001 From: Kostya Shishkov Date: Wed, 29 Apr 2026 18:02:56 +0200 Subject: [PATCH] check for palette change in encoded packets for the muxers not supporting it --- src/main.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main.rs b/src/main.rs index d806f8a..2956a75 100644 --- a/src/main.rs +++ b/src/main.rs @@ -142,13 +142,18 @@ fn split_options(opts: &mut Vec, in_opts: &str) { } } -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; }, @@ -881,11 +886,6 @@ fn main() { 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 { @@ -946,7 +946,7 @@ fn main() { 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; } } @@ -992,7 +992,7 @@ fn main() { } 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!(); -- 2.39.5