]> git.nihav.org Git - nihav-encoder.git/commitdiff
check for palette change in encoded packets for the muxers not supporting it
authorKostya Shishkov <kostya.shishkov@gmail.com>
Wed, 29 Apr 2026 16:02:56 +0000 (18:02 +0200)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Wed, 29 Apr 2026 16:02:56 +0000 (18:02 +0200)
src/main.rs

index d806f8a163d1473a97195cba7ac0679480dd5f0d..2956a75063f4d70f26f926928d84631ef091e951 100644 (file)
@@ -142,13 +142,18 @@ fn split_options(opts: &mut Vec<OptionArgs>, 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!();