]> git.nihav.org Git - nihav-encoder.git/commitdiff
select proper reorderer depending on codec type
authorKostya Shishkov <kostya.shishkov@gmail.com>
Fri, 10 Oct 2025 16:48:57 +0000 (18:48 +0200)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Fri, 10 Oct 2025 16:48:57 +0000 (18:48 +0200)
src/main.rs

index bca697ab25e15975d68b20a6e61702ca0c02d7f8..ccdfc504f530e71ddcf91d409a3722d993b3b58b 100644 (file)
@@ -471,13 +471,21 @@ fn main() {
                 }
                 transcoder.apply_decoder_options(decoder.as_mut(), str_id);
                 let desc = register::get_codec_description(info.get_name());
-                let has_b = if let Some(desc) = desc {
-                        desc.has_reorder()
-                    } else {
+                let caps = if let Some(desc) = desc {
+                        desc.caps
+                    } else if s.get_media_type() == StreamType::Video {
                         println!("No codec description found, using B-frame reorderer.");
-                        true
+                        register::CODEC_CAP_REORDER
+                    } else {
+                        0
+                    };
+                let reorderer: Box<dyn FrameReorderer> = if (caps & register::CODEC_CAP_COMPLEX_REORDER) != 0 {
+                        Box::new(ComplexReorderer::new())
+                    } else if (caps & register::CODEC_CAP_REORDER) != 0 {
+                        Box::new(IPBReorderer::new())
+                    } else {
+                        Box::new(NoReorderer::new())
                     };
-                let reorderer: Box<dyn FrameReorderer> = if has_b { Box::new(IPBReorderer::new()) } else { Box::new(NoReorderer::new()) };
                 transcoder.decoders.push(Some(DecodeContext{ dsupp, decoder, reorderer }));
             } else {
                 println!("No decoder for stream {} ({}) is found", str_id, info.get_name());