]> git.nihav.org Git - nihav.git/commitdiff
nihav_codec_support: add demuxer testing functionality
authorKostya Shishkov <kostya.shishkov@gmail.com>
Thu, 2 Apr 2026 17:31:16 +0000 (19:31 +0200)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Thu, 2 Apr 2026 17:32:33 +0000 (19:32 +0200)
nihav-codec-support/src/test/dmx_test.rs [new file with mode: 0644]
nihav-codec-support/src/test/mod.rs

diff --git a/nihav-codec-support/src/test/dmx_test.rs b/nihav-codec-support/src/test/dmx_test.rs
new file mode 100644 (file)
index 0000000..efd9704
--- /dev/null
@@ -0,0 +1,57 @@
+//! Demuxer testing functionality.
+use nihav_core::demuxers::*;
+
+#[derive(Clone,Copy,Debug,PartialEq)]
+pub struct DPacket {
+    pub stream: u32,
+    pub pts:    Option<u64>,
+    pub dts:    Option<u64>,
+    pub size:   usize,
+    pub kf:     bool,
+}
+
+impl DPacket {
+    pub fn new(stream: u32, pts: Option<u64>, dts: Option<u64>, size: usize, kf: bool) -> Self {
+        Self { stream, pts, dts, size, kf }
+    }
+}
+
+pub enum DemuxerTestMode {
+    Demux,
+    Generate,
+    Test(Vec<DPacket>),
+}
+
+pub fn test_demuxer(dmx: &mut dyn DemuxCore, sm: &mut StreamManager, mut npkts: usize, mode: DemuxerTestMode) {
+    if npkts == 0 {
+        npkts = usize::MAX;
+    }
+    match mode {
+        DemuxerTestMode::Demux => {
+            for _ in 0..npkts {
+                match dmx.get_frame(sm) {
+                    Ok(pkt) => println!("Got {pkt}"),
+                    Err(DemuxerError::EOF) => break,
+                    Err(err) => panic!("demuxer error {:?}", err),
+                }
+            }
+        },
+        DemuxerTestMode::Generate => {
+            for _ in 0..npkts {
+                match dmx.get_frame(sm) {
+                    Ok(pkt) => println!("            DPacket::new({}, {:?}, {:?}, {}, {}),", pkt.get_stream().get_id(), pkt.ts.pts, pkt.ts.dts, pkt.get_buffer().len(), pkt.keyframe),
+                    Err(DemuxerError::EOF) => break,
+                    Err(err) => panic!("demuxer error {:?}", err),
+                }
+            }
+            panic!("Generated data");
+        },
+        DemuxerTestMode::Test(mdata) => {
+            for refpkt in mdata.iter().take(npkts) {
+                let pkt = dmx.get_frame(sm).unwrap();
+                let ndt = DPacket::new(pkt.get_stream().get_id(), pkt.ts.pts, pkt.ts.dts, pkt.get_buffer().len(), pkt.keyframe);
+                assert_eq!(&ndt, refpkt);
+            }
+        },
+    }
+}
index 28a19f6c01a58b1bd2e44c1a6863b65d9b3e02fa..b4ae89cb9edec579cee2fd2a884216cfbbd07c36 100644 (file)
@@ -4,6 +4,7 @@
 #[allow(clippy::identity_op)]
 pub mod dec_video;
 pub mod enc_video;
+pub mod dmx_test;
 pub mod wavwriter;
 
 #[allow(clippy::identity_op)]