diff options
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/baseaudiocontext.rs | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/components/script/dom/baseaudiocontext.rs b/components/script/dom/baseaudiocontext.rs index 14c6bc94e1c..42836dd61f0 100644 --- a/components/script/dom/baseaudiocontext.rs +++ b/components/script/dom/baseaudiocontext.rs @@ -481,14 +481,17 @@ impl BaseAudioContextMethods for BaseAudioContext { .unwrap() .resize(channel_count as usize, Vec::new()); }) - .progress(move |buffer, channel_pos| { + .progress(move |buffer, channel_pos_mask| { let mut decoded_audio = decoded_audio_.lock().unwrap(); let mut channels = channels.lock().unwrap(); - let channel = match channels.entry(channel_pos) { + let channel = match channels.entry(channel_pos_mask) { Entry::Occupied(entry) => *entry.get(), - Entry::Vacant(entry) => *entry.insert(decoded_audio.len()), + Entry::Vacant(entry) => { + let x = (channel_pos_mask as f32).log2() as usize; + *entry.insert(x) + }, }; - decoded_audio[(channel - 1) as usize].extend_from_slice((*buffer).as_ref()); + decoded_audio[channel].extend_from_slice((*buffer).as_ref()); }) .eos(move || { let _ = task_source.queue_with_canceller( |