Compare commits
2 Commits
36de394a2e
...
26515b9ee0
Author | SHA1 | Date | |
---|---|---|---|
26515b9ee0 | |||
79fca548b1 |
@ -43,41 +43,43 @@ impl SimpleClipDetector {
|
||||
smgr.addInQueue(tx);
|
||||
rayon::spawn(
|
||||
move || {
|
||||
let mut streammeta: Option<Arc<StreamMetaData>> = 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) => {
|
||||
streammeta = Some(meta);
|
||||
mins.resize(meta.nchannels(), 0.);
|
||||
maxs.resize(meta.nchannels(), 0.);
|
||||
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();
|
||||
let maxs = flt
|
||||
.columns()
|
||||
// Update channel maximum values
|
||||
flt.columns()
|
||||
.into_iter()
|
||||
.map(|col| max(col))
|
||||
.collect::<Vec<_>>();
|
||||
let mins = flt
|
||||
.columns()
|
||||
.zip(maxs.iter_mut())
|
||||
.for_each(|(coli, maxi)| *maxi = max(coli));
|
||||
// Update channel minimum values
|
||||
flt.columns()
|
||||
.into_iter()
|
||||
.map(|col| min(col))
|
||||
.collect::<Vec<_>>();
|
||||
.zip(mins.iter_mut())
|
||||
.for_each(|(coli, mini)| *mini = min(coli));
|
||||
|
||||
maxs.into_iter().zip(mins).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;
|
||||
if max >= max_for_clip {
|
||||
// Compare minima and maxima against clip limits
|
||||
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
|
||||
// has clipped so we do not have to check any new
|
||||
// blocks anymore.
|
||||
return;
|
||||
}
|
||||
if min <= min_for_clip {
|
||||
if *min <= min_for_clip {
|
||||
clipstate.store(true, Relaxed);
|
||||
// We do not have to do anything anymore. The signal
|
||||
// has clipped so we do not have to check any new
|
||||
|
Loading…
Reference in New Issue
Block a user