MCPcopy Create free account
hub / github.com/BillyDM/Firewheel / validate_output

Function validate_output

crates/firewheel-graph/src/processor/process.rs:702–767  ·  view source on GitHub ↗
(
    output: &mut [&mut [f32]],
    flags: &FirewheelBitFlags,
    shared_flags: &Arc<SharedFlags>,
    logger: &mut RealtimeLogger,
)

Source from the content-addressed store, hash-verified

700 logger: &mut RealtimeLogger,
701) {
702 if flags.contains(FirewheelBitFlags::VALIDATE_OUTPUT_IS_FINITE) {
703 let mut non_finite_value = 0.0;
704
705 for ch in output.iter_mut() {
706 for s in ch.iter_mut() {
707 // Try to optimize for auto-vectorization
708 let is_finite = s.is_finite();
709
710 non_finite_value = if is_finite { non_finite_value } else { *s };
711 *s = if is_finite { *s } else { 0.0 };
712 }
713 }
714
715 if non_finite_value != 0.0 {
716 let _ = logger.try_error_with(|s| {
717 #[cfg(feature = "std")]
718 {
719 *s = format!(
720 "Non-finite number detected on audio output: {}",
721 non_finite_value
722 );
723 }
724
725 #[cfg(not(feature = "std"))]
726 {
727 *s = bevy_platform::prelude::String::from(
728 "Non-finite number detected on audio output",
729 );
730 }
731 });
732 }
733 }
734
735 if flags.contains(FirewheelBitFlags::DETECT_CLIPPING_ON_OUTPUT) {
736 let mut clipping_occurred = false;
737
738 for ch in output.iter() {
739 let max_peak = firewheel_core::dsp::algo::max_peak(ch);
740
741 if max_peak > 1.0 {
742 clipping_occurred = true;
743 break;
744 }
745 }
746
747 if clipping_occurred {
748 shared_flags
749 .clipping_occurred
750 .store(true, Ordering::Relaxed);
751 }
752 }
753
754 if flags.contains(FirewheelBitFlags::HARD_CLIP_OUTPUTS) {
755 for ch in output.iter_mut() {
756 for s in ch.iter_mut() {
757 *s = s.clamp(-1.0, 1.0);
758 }
759 }

Callers 1

processMethod · 0.85

Calls 4

max_peakFunction · 0.85
containsMethod · 0.80
try_error_withMethod · 0.80
clampMethod · 0.80

Tested by

no test coverage detected