From 86e44ce0094936c50aa1a147e45154be300819fb Mon Sep 17 00:00:00 2001 From: Kostya Shishkov Date: Thu, 2 Apr 2026 19:31:16 +0200 Subject: [PATCH] nihav_codec_support: add demuxer testing functionality --- nihav-codec-support/src/test/dmx_test.rs | 57 ++++++++++++++++++++++++ nihav-codec-support/src/test/mod.rs | 1 + 2 files changed, 58 insertions(+) create mode 100644 nihav-codec-support/src/test/dmx_test.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 index 0000000..efd9704 --- /dev/null +++ b/nihav-codec-support/src/test/dmx_test.rs @@ -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, + pub dts: Option, + pub size: usize, + pub kf: bool, +} + +impl DPacket { + pub fn new(stream: u32, pts: Option, dts: Option, size: usize, kf: bool) -> Self { + Self { stream, pts, dts, size, kf } + } +} + +pub enum DemuxerTestMode { + Demux, + Generate, + Test(Vec), +} + +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); + } + }, + } +} diff --git a/nihav-codec-support/src/test/mod.rs b/nihav-codec-support/src/test/mod.rs index 28a19f6..b4ae89c 100644 --- a/nihav-codec-support/src/test/mod.rs +++ b/nihav-codec-support/src/test/mod.rs @@ -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)] -- 2.39.5