diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/webaudio/media_element_audio_source_node.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/modules/webaudio/media_element_audio_source_node.cc | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/chromium/third_party/blink/renderer/modules/webaudio/media_element_audio_source_node.cc b/chromium/third_party/blink/renderer/modules/webaudio/media_element_audio_source_node.cc index 98e4b184434..ef239b45c28 100644 --- a/chromium/third_party/blink/renderer/modules/webaudio/media_element_audio_source_node.cc +++ b/chromium/third_party/blink/renderer/modules/webaudio/media_element_audio_source_node.cc @@ -26,14 +26,15 @@ #include "third_party/blink/renderer/modules/webaudio/media_element_audio_source_node.h" #include "third_party/blink/public/platform/task_type.h" +#include "third_party/blink/renderer/bindings/modules/v8/v8_media_element_audio_source_options.h" #include "third_party/blink/renderer/core/frame/deprecation.h" #include "third_party/blink/renderer/core/html/media/html_media_element.h" #include "third_party/blink/renderer/core/inspector/console_message.h" #include "third_party/blink/renderer/modules/webaudio/audio_context.h" #include "third_party/blink/renderer/modules/webaudio/audio_node_output.h" -#include "third_party/blink/renderer/modules/webaudio/media_element_audio_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/heap/heap.h" #include "third_party/blink/renderer/platform/weborigin/security_origin.h" #include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h" @@ -137,8 +138,12 @@ void MediaElementAudioSourceHandler::SetFormat(uint32_t number_of_channels, if (source_sample_rate != Context()->sampleRate()) { double scale_factor = source_sample_rate / Context()->sampleRate(); - multi_channel_resampler_ = std::make_unique<MultiChannelResampler>( - scale_factor, number_of_channels); + multi_channel_resampler_.reset(new MediaMultiChannelResampler( + number_of_channels, scale_factor, + audio_utilities::kRenderQuantumFrames, + CrossThreadBindRepeating( + &MediaElementAudioSourceHandler::ProvideResamplerInput, + CrossThreadUnretained(this)))); } else { // Bypass resampling. multi_channel_resampler_.reset(); @@ -162,14 +167,24 @@ bool MediaElementAudioSourceHandler::WouldTaintOrigin() { void MediaElementAudioSourceHandler::PrintCorsMessage(const String& message) { if (Context()->GetExecutionContext()) { Context()->GetExecutionContext()->AddConsoleMessage( - ConsoleMessage::Create(mojom::ConsoleMessageSource::kSecurity, - mojom::ConsoleMessageLevel::kInfo, - "MediaElementAudioSource outputs zeroes due to " - "CORS access restrictions for " + - message)); + MakeGarbageCollected<ConsoleMessage>( + mojom::ConsoleMessageSource::kSecurity, + mojom::ConsoleMessageLevel::kInfo, + "MediaElementAudioSource outputs zeroes due to " + "CORS access restrictions for " + + message)); } } +void MediaElementAudioSourceHandler::ProvideResamplerInput( + int resampler_frame_delay, + AudioBus* dest) { + DCHECK(Context()->IsAudioThread()); + DCHECK(MediaElement()); + DCHECK(dest); + MediaElement()->GetAudioSourceProvider().ProvideInput(dest, dest->length()); +} + void MediaElementAudioSourceHandler::Process(uint32_t number_of_frames) { AudioBus* output_bus = Output(0).Bus(); @@ -197,8 +212,7 @@ void MediaElementAudioSourceHandler::Process(uint32_t number_of_frames) { // progress, even if we're going to output silence anyway. if (multi_channel_resampler_.get()) { DCHECK_NE(source_sample_rate_, Context()->sampleRate()); - multi_channel_resampler_->Process(&provider, output_bus, - number_of_frames); + multi_channel_resampler_->Resample(number_of_frames, output_bus); } else { // Bypass the resampler completely if the source is at the context's // sample-rate. @@ -271,7 +285,7 @@ MediaElementAudioSourceNode* MediaElementAudioSourceNode::Create( return Create(*context, *options->mediaElement(), exception_state); } -void MediaElementAudioSourceNode::Trace(blink::Visitor* visitor) { +void MediaElementAudioSourceNode::Trace(Visitor* visitor) { visitor->Trace(media_element_); AudioSourceProviderClient::Trace(visitor); AudioNode::Trace(visitor); |