From 26515b9ee015bc700ef911c50f8ba9bb15ccee8f Mon Sep 17 00:00:00 2001 From: "J.A. de Jong - Redu-Sone B.V., ASCEE V.O.F." Date: Sat, 2 Nov 2024 00:38:33 +0100 Subject: [PATCH] Even smarter. No stream meta stored but just the ranges for each channel. --- src/rt/simpleclip.rs | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/rt/simpleclip.rs b/src/rt/simpleclip.rs index f69b929..cc3db2a 100644 --- a/src/rt/simpleclip.rs +++ b/src/rt/simpleclip.rs @@ -43,21 +43,18 @@ impl SimpleClipDetector { smgr.addInQueue(tx); rayon::spawn( move || { - let mut streammeta: Option> = None; let mut mins = vec![]; let mut maxs = vec![]; + let mut ranges = vec![]; loop { if let Ok(msg) = rx.recv_timeout(Duration::from_millis(1500)) { match msg { InStreamMsg::StreamStarted(meta) => { mins.resize(meta.nchannels(), 0.); maxs.resize(meta.nchannels(), 0.); - streammeta = Some(meta); + ranges = meta.channelInfo.iter().map(|ch| ch.range).collect(); } InStreamMsg::InStreamData(dat) => { - let meta = streammeta - .as_ref() - .expect("If we are here, stream metadata should be available"); let flt = dat.getFloatData(); // Update channel maximum values flt.columns() @@ -71,12 +68,10 @@ impl SimpleClipDetector { .for_each(|(coli, mini)| *mini = min(coli)); // Compare minima and maxima against clip limits - maxs.iter() - .zip(mins.iter()) - .zip(&meta.channelInfo) - .for_each(|((max, min), ch)| { - let min_for_clip = CLIP_REL_LIMIT * ch.range.0; - let max_for_clip = CLIP_REL_LIMIT * ch.range.1; + maxs.iter().zip(mins.iter()).zip(ranges.iter()).for_each( + |((max, min), range)| { + let min_for_clip = CLIP_REL_LIMIT * range.0; + let max_for_clip = CLIP_REL_LIMIT * range.1; if *max >= max_for_clip { clipstate.store(true, Relaxed); // We do not have to do anything anymore. The signal @@ -91,7 +86,8 @@ impl SimpleClipDetector { // blocks anymore. return; } - }); + }, + ); } // Ignore other stream messages _ => {}