Skip to content

Commit 854f5a5

Browse files
committed
Make BiquadFilterNode set_type thread safe
1 parent 0af1610 commit 854f5a5

File tree

2 files changed

+16
-17
lines changed

2 files changed

+16
-17
lines changed

src/node/biquad_filter.rs

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
//! The biquad filter control and renderer parts
22
use std::any::Any;
33
use std::f64::consts::{PI, SQRT_2};
4-
use std::sync::atomic::{AtomicU32, Ordering};
54

65
use num_complex::Complex;
76

@@ -309,8 +308,8 @@ pub struct BiquadFilterNode {
309308
/// boost/attenuation (dB) - its impact on the frequency response of the
310309
/// filter, depends on the `BiquadFilterType`
311310
gain: AudioParam,
312-
/// `BiquadFilterType` represented as u32
313-
type_: AtomicU32,
311+
/// Current biquad filter type
312+
type_: BiquadFilterType,
314313
}
315314

316315
impl AudioNode for BiquadFilterNode {
@@ -402,7 +401,7 @@ impl BiquadFilterNode {
402401
let node = Self {
403402
registration,
404403
channel_config: channel_config.into(),
405-
type_: AtomicU32::new(type_ as u32),
404+
type_,
406405
q: q_param,
407406
detune: d_param,
408407
frequency: f_param,
@@ -440,16 +439,16 @@ impl BiquadFilterNode {
440439
/// Returns the biquad filter type
441440
#[must_use]
442441
pub fn type_(&self) -> BiquadFilterType {
443-
self.type_.load(Ordering::Acquire).into()
442+
self.type_
444443
}
445444

446445
/// biquad filter type setter
447446
///
448447
/// # Arguments
449448
///
450449
/// * `type_` - the biquad filter type (lowpass, highpass,...)
451-
pub fn set_type(&self, type_: BiquadFilterType) {
452-
self.type_.store(type_ as u32, Ordering::Release);
450+
pub fn set_type(&mut self, type_: BiquadFilterType) {
451+
self.type_ = type_;
453452
self.registration.post_message(type_);
454453
}
455454

@@ -820,7 +819,7 @@ mod tests {
820819
-2.6204006671905518,
821820
];
822821

823-
let filter = context.create_biquad_filter();
822+
let mut filter = context.create_biquad_filter();
824823
filter.set_type(type_);
825824
filter.frequency().set_value(frequency);
826825
filter.q().set_value(q);
@@ -862,7 +861,7 @@ mod tests {
862861
0.5211920142173767,
863862
];
864863

865-
let filter = context.create_biquad_filter();
864+
let mut filter = context.create_biquad_filter();
866865
filter.set_type(type_);
867866
filter.frequency().set_value(frequency);
868867
filter.q().set_value(q);
@@ -904,7 +903,7 @@ mod tests {
904903
-0.9985077977180481,
905904
];
906905

907-
let filter = context.create_biquad_filter();
906+
let mut filter = context.create_biquad_filter();
908907
filter.set_type(type_);
909908
filter.frequency().set_value(frequency);
910909
filter.q().set_value(q);
@@ -946,7 +945,7 @@ mod tests {
946945
0.5722885727882385,
947946
];
948947

949-
let filter = context.create_biquad_filter();
948+
let mut filter = context.create_biquad_filter();
950949
filter.set_type(type_);
951950
filter.frequency().set_value(frequency);
952951
filter.q().set_value(q);
@@ -977,7 +976,7 @@ mod tests {
977976
1.144577145576477,
978977
];
979978

980-
let filter = context.create_biquad_filter();
979+
let mut filter = context.create_biquad_filter();
981980
filter.set_type(type_);
982981
filter.frequency().set_value(frequency);
983982
filter.q().set_value(q);
@@ -1019,7 +1018,7 @@ mod tests {
10191018
-0.1567305326461792,
10201019
];
10211020

1022-
let filter = context.create_biquad_filter();
1021+
let mut filter = context.create_biquad_filter();
10231022
filter.set_type(type_);
10241023
filter.frequency().set_value(frequency);
10251024
filter.q().set_value(q);
@@ -1061,7 +1060,7 @@ mod tests {
10611060
-0.1404205560684204,
10621061
];
10631062

1064-
let filter = context.create_biquad_filter();
1063+
let mut filter = context.create_biquad_filter();
10651064
filter.set_type(type_);
10661065
filter.frequency().set_value(frequency);
10671066
filter.q().set_value(q);
@@ -1103,7 +1102,7 @@ mod tests {
11031102
0.1404205560684204,
11041103
];
11051104

1106-
let filter = context.create_biquad_filter();
1105+
let mut filter = context.create_biquad_filter();
11071106
filter.set_type(type_);
11081107
filter.frequency().set_value(frequency);
11091108
filter.q().set_value(q);

src/node/iir_filter.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,7 @@ mod tests {
510510
let biquad_res = {
511511
let context = OfflineAudioContext::new(1, 1000, 44_100.);
512512

513-
let biquad = context.create_biquad_filter();
513+
let mut biquad = context.create_biquad_filter();
514514
biquad.connect(&context.destination());
515515
biquad.set_type(filter_type);
516516
biquad.frequency().set_value(frequency);
@@ -753,7 +753,7 @@ mod tests {
753753
let mut mags = [0.; 10];
754754
let mut phases = [0.; 10];
755755

756-
let biquad = context.create_biquad_filter();
756+
let mut biquad = context.create_biquad_filter();
757757
biquad.set_type(filter_type);
758758
biquad.frequency().set_value(frequency);
759759
biquad.q().set_value(q);

0 commit comments

Comments
 (0)