diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/webaudio/constant_source_node.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/modules/webaudio/constant_source_node.cc | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/chromium/third_party/blink/renderer/modules/webaudio/constant_source_node.cc b/chromium/third_party/blink/renderer/modules/webaudio/constant_source_node.cc index 77e91a7f98b..075b2802a57 100644 --- a/chromium/third_party/blink/renderer/modules/webaudio/constant_source_node.cc +++ b/chromium/third_party/blink/renderer/modules/webaudio/constant_source_node.cc @@ -6,8 +6,8 @@ #include <algorithm> +#include "third_party/blink/renderer/bindings/modules/v8/v8_constant_source_options.h" #include "third_party/blink/renderer/modules/webaudio/audio_node_output.h" -#include "third_party/blink/renderer/modules/webaudio/constant_source_options.h" #include "third_party/blink/renderer/platform/audio/audio_utilities.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/wtf/math_extras.h" @@ -70,7 +70,9 @@ void ConstantSourceHandler::Process(uint32_t frames_to_process) { return; } - if (offset_->HasSampleAccurateValues()) { + bool is_sample_accurate = offset_->HasSampleAccurateValuesTimeline(); + + if (is_sample_accurate && offset_->IsAudioRate()) { DCHECK_LE(frames_to_process, sample_accurate_values_.size()); float* offsets = sample_accurate_values_.Data(); offset_->CalculateSampleAccurateValues(offsets, frames_to_process); @@ -82,19 +84,20 @@ void ConstantSourceHandler::Process(uint32_t frames_to_process) { } else { output_bus->Zero(); } - } else { - float value = offset_->Value(); - if (value == 0) { - output_bus->Zero(); - } else { - float* dest = output_bus->Channel(0)->MutableData(); - dest += quantum_frame_offset; - for (unsigned k = 0; k < non_silent_frames_to_process; ++k) { - dest[k] = value; - } - output_bus->ClearSilentFlag(); + return; + } + + float value = is_sample_accurate ? offset_->FinalValue() : offset_->Value(); + if (value == 0) { + output_bus->Zero(); + } else { + float* dest = output_bus->Channel(0)->MutableData(); + dest += quantum_frame_offset; + for (unsigned k = 0; k < non_silent_frames_to_process; ++k) { + dest[k] = value; } + output_bus->ClearSilentFlag(); } } @@ -153,7 +156,7 @@ ConstantSourceNode* ConstantSourceNode::Create( return node; } -void ConstantSourceNode::Trace(blink::Visitor* visitor) { +void ConstantSourceNode::Trace(Visitor* visitor) { visitor->Trace(offset_); AudioScheduledSourceNode::Trace(visitor); } |