mirror of
https://github.com/servo/servo.git
synced 2025-08-07 14:35:33 +01:00
Use buffer_set flag for AudioBufferSourceNode buffer setter
This commit is contained in:
parent
ea2ca7ed4a
commit
bbc3565900
1 changed files with 11 additions and 2 deletions
|
@ -29,6 +29,7 @@ use std::f32;
|
||||||
pub struct AudioBufferSourceNode {
|
pub struct AudioBufferSourceNode {
|
||||||
source_node: AudioScheduledSourceNode,
|
source_node: AudioScheduledSourceNode,
|
||||||
buffer: MutNullableDom<AudioBuffer>,
|
buffer: MutNullableDom<AudioBuffer>,
|
||||||
|
buffer_set: Cell<bool>,
|
||||||
playback_rate: Dom<AudioParam>,
|
playback_rate: Dom<AudioParam>,
|
||||||
detune: Dom<AudioParam>,
|
detune: Dom<AudioParam>,
|
||||||
loop_enabled: Cell<bool>,
|
loop_enabled: Cell<bool>,
|
||||||
|
@ -75,6 +76,7 @@ impl AudioBufferSourceNode {
|
||||||
let node = AudioBufferSourceNode {
|
let node = AudioBufferSourceNode {
|
||||||
source_node,
|
source_node,
|
||||||
buffer: Default::default(),
|
buffer: Default::default(),
|
||||||
|
buffer_set: Cell::new(false),
|
||||||
playback_rate: Dom::from_ref(&playback_rate),
|
playback_rate: Dom::from_ref(&playback_rate),
|
||||||
detune: Dom::from_ref(&detune),
|
detune: Dom::from_ref(&detune),
|
||||||
loop_enabled: Cell::new(options.loop_),
|
loop_enabled: Cell::new(options.loop_),
|
||||||
|
@ -122,12 +124,19 @@ impl AudioBufferSourceNodeMethods for AudioBufferSourceNode {
|
||||||
|
|
||||||
// https://webaudio.github.io/web-audio-api/#dom-audiobuffersourcenode-buffer
|
// https://webaudio.github.io/web-audio-api/#dom-audiobuffersourcenode-buffer
|
||||||
fn SetBuffer(&self, new_buffer: Option<&AudioBuffer>) -> Fallible<()> {
|
fn SetBuffer(&self, new_buffer: Option<&AudioBuffer>) -> Fallible<()> {
|
||||||
if new_buffer.is_some() && self.buffer.get().is_some() {
|
if new_buffer.is_some() {
|
||||||
return Err(Error::InvalidState);
|
if self.buffer_set.get() {
|
||||||
|
// Step 2.
|
||||||
|
return Err(Error::InvalidState);
|
||||||
|
}
|
||||||
|
// Step 3.
|
||||||
|
self.buffer_set.set(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Step 4.
|
||||||
self.buffer.set(new_buffer);
|
self.buffer.set(new_buffer);
|
||||||
|
|
||||||
|
// Step 5.
|
||||||
if self.source_node.started() {
|
if self.source_node.started() {
|
||||||
if let Some(buffer) = self.buffer.get() {
|
if let Some(buffer) = self.buffer.get() {
|
||||||
let buffer = buffer.acquire_contents();
|
let buffer = buffer.acquire_contents();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue