diff options
23 files changed, 72 insertions, 414 deletions
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc index a3c1eb4..de52237 100644 --- a/chrome/renderer/chrome_content_renderer_client.cc +++ b/chrome/renderer/chrome_content_renderer_client.cc @@ -295,7 +295,6 @@ bool ChromeContentRendererClient::OverrideCreateWebMediaPlayer( WebKit::WebMediaPlayerClient* client, base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate, media::FilterCollection* collection, - WebKit::WebAudioSourceProvider* audio_source_provider, media::MessageLoopFactory* message_loop_factory, webkit_media::MediaStreamClient* media_stream_client, media::MediaLog* media_log, @@ -304,8 +303,8 @@ bool ChromeContentRendererClient::OverrideCreateWebMediaPlayer( return false; *player = new prerender::PrerenderWebMediaPlayer(render_view, client, - delegate, collection, audio_source_provider, message_loop_factory, - media_stream_client, media_log); + delegate, collection, message_loop_factory, media_stream_client, + media_log); return true; } diff --git a/chrome/renderer/chrome_content_renderer_client.h b/chrome/renderer/chrome_content_renderer_client.h index 64db976..1029e4e 100644 --- a/chrome/renderer/chrome_content_renderer_client.h +++ b/chrome/renderer/chrome_content_renderer_client.h @@ -64,7 +64,6 @@ class ChromeContentRendererClient : public content::ContentRendererClient { WebKit::WebMediaPlayerClient* client, base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate, media::FilterCollection* collection, - WebKit::WebAudioSourceProvider* audio_source_provider, media::MessageLoopFactory* message_loop_factory, webkit_media::MediaStreamClient* media_stream_client, media::MediaLog* media_log, diff --git a/chrome/renderer/prerender/prerender_webmediaplayer.cc b/chrome/renderer/prerender/prerender_webmediaplayer.cc index c63af25..90cc202 100644 --- a/chrome/renderer/prerender/prerender_webmediaplayer.cc +++ b/chrome/renderer/prerender/prerender_webmediaplayer.cc @@ -19,7 +19,6 @@ PrerenderWebMediaPlayer::PrerenderWebMediaPlayer( WebKit::WebMediaPlayerClient* client, base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate, media::FilterCollection* collection, - WebKit::WebAudioSourceProvider* audio_source_provider, media::MessageLoopFactory* message_loop_factory, webkit_media::MediaStreamClient* media_stream_client, media::MediaLog* media_log) @@ -27,7 +26,6 @@ PrerenderWebMediaPlayer::PrerenderWebMediaPlayer( WebMediaPlayerImpl(client, delegate, collection, - audio_source_provider, message_loop_factory, media_stream_client, media_log), diff --git a/chrome/renderer/prerender/prerender_webmediaplayer.h b/chrome/renderer/prerender/prerender_webmediaplayer.h index 8370367..99db44e 100644 --- a/chrome/renderer/prerender/prerender_webmediaplayer.h +++ b/chrome/renderer/prerender/prerender_webmediaplayer.h @@ -29,7 +29,6 @@ class PrerenderWebMediaPlayer WebKit::WebMediaPlayerClient* client, base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate, media::FilterCollection* collection, - WebKit::WebAudioSourceProvider* audio_source_provider, media::MessageLoopFactory* message_loop_factory, webkit_media::MediaStreamClient* media_stream_client, media::MediaLog* media_log); diff --git a/content/content_renderer.gypi b/content/content_renderer.gypi index b75579d..97f4afd 100644 --- a/content/content_renderer.gypi +++ b/content/content_renderer.gypi @@ -139,8 +139,6 @@ 'renderer/pepper_plugin_delegate_impl.h', 'renderer/plugin_channel_host.cc', 'renderer/plugin_channel_host.h', - 'renderer/render_audiosourceprovider.cc', - 'renderer/render_audiosourceprovider.h', 'renderer/render_process.h', 'renderer/render_process_impl.cc', 'renderer/render_process_impl.h', diff --git a/content/public/renderer/content_renderer_client.h b/content/public/renderer/content_renderer_client.h index 279d65b..c666fda 100644 --- a/content/public/renderer/content_renderer_client.h +++ b/content/public/renderer/content_renderer_client.h @@ -18,7 +18,6 @@ class GURL; class SkBitmap; namespace WebKit { -class WebAudioSourceProvider; class WebFrame; class WebMediaPlayerClient; class WebPlugin; @@ -112,7 +111,6 @@ class ContentRendererClient { WebKit::WebMediaPlayerClient* client, base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate, media::FilterCollection* collection, - WebKit::WebAudioSourceProvider* audio_source_provider, media::MessageLoopFactory* message_loop_factory, webkit_media::MediaStreamClient* media_stream_client, media::MediaLog* media_log, diff --git a/content/renderer/media/audio_device.cc b/content/renderer/media/audio_device.cc index 75c2bad..f6ead33 100644 --- a/content/renderer/media/audio_device.cc +++ b/content/renderer/media/audio_device.cc @@ -62,8 +62,6 @@ void AudioDevice::Initialize(size_t buffer_size, CHECK_EQ(0, stream_id_) << "AudioDevice::Initialize() must be called before Start()"; - CHECK(!is_initialized_); - buffer_size_ = buffer_size; channels_ = channels; sample_rate_ = sample_rate; @@ -83,6 +81,10 @@ void AudioDevice::Initialize(size_t buffer_size, is_initialized_ = true; } +bool AudioDevice::IsInitialized() { + return is_initialized_; +} + AudioDevice::~AudioDevice() { // The current design requires that the user calls Stop() before deleting // this class. diff --git a/content/renderer/media/audio_device.h b/content/renderer/media/audio_device.h index 815a493..d8680c0 100644 --- a/content/renderer/media/audio_device.h +++ b/content/renderer/media/audio_device.h @@ -73,13 +73,25 @@ #include "content/common/content_export.h" #include "content/renderer/media/audio_message_filter.h" #include "media/audio/audio_parameters.h" -#include "media/base/audio_renderer_sink.h" class CONTENT_EXPORT AudioDevice - : public media::AudioRendererSink, - public AudioMessageFilter::Delegate, - public base::DelegateSimpleThread::Delegate { + : public AudioMessageFilter::Delegate, + public base::DelegateSimpleThread::Delegate, + public base::RefCountedThreadSafe<AudioDevice> { public: + class CONTENT_EXPORT RenderCallback { + public: + // Fills entire buffer of length |number_of_frames| but returns actual + // number of frames it got from its source (|number_of_frames| in case of + // continuous stream). That actual number of frames is passed to host + // together with PCM audio data and host is free to use or ignore it. + virtual size_t Render(const std::vector<float*>& audio_data, + size_t number_of_frames, + size_t audio_delay_milliseconds) = 0; + protected: + virtual ~RenderCallback() {} + }; + // Methods called on main render thread ------------------------------------- // Minimal constructor where Initialize() must be called later. @@ -91,38 +103,38 @@ class CONTENT_EXPORT AudioDevice RenderCallback* callback); virtual ~AudioDevice(); - // AudioRendererSink implementation. + void Initialize(size_t buffer_size, + int channels, + double sample_rate, + AudioParameters::Format latency_format, + RenderCallback* callback); + bool IsInitialized(); - virtual void Initialize(size_t buffer_size, - int channels, - double sample_rate, - AudioParameters::Format latency_format, - RenderCallback* callback) OVERRIDE; // Starts audio playback. - virtual void Start() OVERRIDE; + void Start(); // Stops audio playback. - virtual void Stop() OVERRIDE; + void Stop(); // Resumes playback if currently paused. // TODO(crogers): it should be possible to remove the extra complexity // of Play() and Pause() with additional re-factoring work in // AudioRendererImpl. - virtual void Play() OVERRIDE; + void Play(); // Pauses playback. // If |flush| is true then any pending audio that is in the pipeline // (has not yet reached the hardware) will be discarded. In this case, // when Play() is later called, no previous pending audio will be // rendered. - virtual void Pause(bool flush) OVERRIDE; + void Pause(bool flush); // Sets the playback volume, with range [0.0, 1.0] inclusive. // Returns |true| on success. - virtual bool SetVolume(double volume) OVERRIDE; + bool SetVolume(double volume); // Gets the playback volume, with range [0.0, 1.0] inclusive. - virtual void GetVolume(double* volume) OVERRIDE; + void GetVolume(double* volume); double sample_rate() const { return sample_rate_; } size_t buffer_size() const { return buffer_size_; } diff --git a/content/renderer/media/audio_renderer_impl.cc b/content/renderer/media/audio_renderer_impl.cc index eb54186..ca905a0 100644 --- a/content/renderer/media/audio_renderer_impl.cc +++ b/content/renderer/media/audio_renderer_impl.cc @@ -35,12 +35,16 @@ static size_t GetBufferSizeForSampleRate(int sample_rate) { return kNominalBufferSize * 4; } -AudioRendererImpl::AudioRendererImpl(media::AudioRendererSink* sink) +AudioRendererImpl::AudioRendererImpl() : AudioRendererBase(), bytes_per_second_(0), - stopped_(false), - sink_(sink), - is_initialized_(false) { + stopped_(false) { + // We create the AudioDevice here because it must be created in the + // main thread. But we don't yet know the audio format (sample-rate, etc.) + // at this point. Later, when OnInitialize() is called, we have + // the audio format information and call the AudioDevice::Initialize() + // method to fully initialize it. + audio_device_ = new AudioDevice(); } AudioRendererImpl::~AudioRendererImpl() { @@ -86,30 +90,28 @@ bool AudioRendererImpl::OnInitialize(int bits_per_channel, bytes_per_second_ = audio_parameters_.GetBytesPerSecond(); - DCHECK(sink_.get()); + DCHECK(audio_device_.get()); - if (!is_initialized_) { - sink_->Initialize( + if (!audio_device_->IsInitialized()) { + audio_device_->Initialize( GetBufferSizeForSampleRate(sample_rate), audio_parameters_.channels, audio_parameters_.sample_rate, audio_parameters_.format, this); - sink_->Start(); - is_initialized_ = true; - return true; + audio_device_->Start(); } - return false; + return true; } void AudioRendererImpl::OnStop() { if (stopped_) return; - DCHECK(sink_.get()); - sink_->Stop(); + DCHECK(audio_device_.get()); + audio_device_->Stop(); stopped_ = true; } @@ -167,27 +169,27 @@ void AudioRendererImpl::Play(const base::Closure& callback) { void AudioRendererImpl::SetVolume(float volume) { if (stopped_) return; - DCHECK(sink_.get()); - sink_->SetVolume(volume); + DCHECK(audio_device_.get()); + audio_device_->SetVolume(volume); } void AudioRendererImpl::DoPlay() { earliest_end_time_ = base::Time::Now(); - DCHECK(sink_.get()); - sink_->Play(); + DCHECK(audio_device_.get()); + audio_device_->Play(); } void AudioRendererImpl::DoPause() { - DCHECK(sink_.get()); - sink_->Pause(false); + DCHECK(audio_device_.get()); + audio_device_->Pause(false); } void AudioRendererImpl::DoSeek() { earliest_end_time_ = base::Time::Now(); // Pause and flush the stream when we seek to a new location. - DCHECK(sink_.get()); - sink_->Pause(true); + DCHECK(audio_device_.get()); + audio_device_->Pause(true); } size_t AudioRendererImpl::Render(const std::vector<float*>& audio_data, diff --git a/content/renderer/media/audio_renderer_impl.h b/content/renderer/media/audio_renderer_impl.h index cc84a50..f555b11 100644 --- a/content/renderer/media/audio_renderer_impl.h +++ b/content/renderer/media/audio_renderer_impl.h @@ -25,18 +25,16 @@ #include "content/renderer/media/audio_device.h" #include "media/audio/audio_io.h" #include "media/audio/audio_parameters.h" -#include "media/base/audio_renderer_sink.h" #include "media/filters/audio_renderer_base.h" class AudioMessageFilter; class CONTENT_EXPORT AudioRendererImpl : public media::AudioRendererBase, - public media::AudioRendererSink::RenderCallback { + public AudioDevice::RenderCallback { public: // Methods called on Render thread ------------------------------------------ - // An AudioRendererSink is used as the destination for the rendered audio. - explicit AudioRendererImpl(media::AudioRendererSink* sink); + AudioRendererImpl(); virtual ~AudioRendererImpl(); // Methods called on pipeline thread ---------------------------------------- @@ -76,7 +74,7 @@ class CONTENT_EXPORT AudioRendererImpl void DoPause(); void DoSeek(); - // media::AudioRendererSink::RenderCallback implementation. + // AudioDevice::RenderCallback implementation. virtual size_t Render(const std::vector<float*>& audio_data, size_t number_of_frames, size_t audio_delay_milliseconds) OVERRIDE; @@ -105,11 +103,8 @@ class CONTENT_EXPORT AudioRendererImpl // A flag that indicates this filter is called to stop. bool stopped_; - // The sink (destination) for rendered audio. - scoped_refptr<media::AudioRendererSink> sink_; - - // Set to true when OnInitialize() is called. - bool is_initialized_; + // audio_device_ is the sink (destination) for rendered audio. + scoped_refptr<AudioDevice> audio_device_; // We're supposed to know amount of audio data OS or hardware buffered, but // that is not always so -- on my Linux box diff --git a/content/renderer/media/audio_renderer_impl_unittest.cc b/content/renderer/media/audio_renderer_impl_unittest.cc index f760798..7a2895b 100644 --- a/content/renderer/media/audio_renderer_impl_unittest.cc +++ b/content/renderer/media/audio_renderer_impl_unittest.cc @@ -54,8 +54,8 @@ void WaitCallback(base::WaitableEvent* event) { // Class we would be testing. class TestAudioRendererImpl : public AudioRendererImpl { public: - explicit TestAudioRendererImpl(media::AudioRendererSink* sink) - : AudioRendererImpl(sink) { + explicit TestAudioRendererImpl() + : AudioRendererImpl() { } }; @@ -100,12 +100,8 @@ class AudioRendererImplTest EXPECT_CALL(*decoder_, samples_per_second()) .WillRepeatedly(Return(44100)); - // Create a sink for the audio renderer. - scoped_refptr<media::AudioRendererSink> default_sink = - new AudioDevice(); - // Create and initialize the audio renderer. - renderer_ = new TestAudioRendererImpl(default_sink.get()); + renderer_ = new TestAudioRendererImpl(); renderer_->Initialize(decoder_, media::NewExpectedClosure(), NewUnderflowClosure()); diff --git a/content/renderer/mock_content_renderer_client.cc b/content/renderer/mock_content_renderer_client.cc index 5a50a0e..c3c97fe 100644 --- a/content/renderer/mock_content_renderer_client.cc +++ b/content/renderer/mock_content_renderer_client.cc @@ -47,7 +47,6 @@ bool MockContentRendererClient::OverrideCreateWebMediaPlayer( WebKit::WebMediaPlayerClient* client, base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate, media::FilterCollection* collection, - WebKit::WebAudioSourceProvider* audio_source_provider, media::MessageLoopFactory* message_loop_factory, webkit_media::MediaStreamClient* media_stream_client, media::MediaLog* media_log, diff --git a/content/renderer/mock_content_renderer_client.h b/content/renderer/mock_content_renderer_client.h index 7bd1c33..4bddf8d 100644 --- a/content/renderer/mock_content_renderer_client.h +++ b/content/renderer/mock_content_renderer_client.h @@ -39,7 +39,6 @@ class MockContentRendererClient : public ContentRendererClient { WebKit::WebMediaPlayerClient* client, base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate, media::FilterCollection* collection, - WebKit::WebAudioSourceProvider* audio_source_provider, media::MessageLoopFactory* message_loop_factory, webkit_media::MediaStreamClient* media_stream_client, media::MediaLog* media_log, diff --git a/content/renderer/render_audiosourceprovider.cc b/content/renderer/render_audiosourceprovider.cc deleted file mode 100644 index 6f070d5..0000000 --- a/content/renderer/render_audiosourceprovider.cc +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "content/renderer/render_audiosourceprovider.h" - -#include "base/basictypes.h" -#include "base/logging.h" -#include "third_party/WebKit/Source/WebKit/chromium/public/WebAudioSourceProviderClient.h" - -using std::vector; -using WebKit::WebVector; - -RenderAudioSourceProvider::RenderAudioSourceProvider() - : is_initialized_(false), - channels_(0), - sample_rate_(0.0), - is_running_(false), - volume_(1.0), - renderer_(NULL), - client_(NULL) { - // We create the AudioDevice here because it must be created in the - // main thread. But we don't yet know the audio format (sample-rate, etc.) - // at this point. Later, when Initialize() is called, we have - // the audio format information and call the AudioDevice::Initialize() - // method to fully initialize it. - default_sink_ = new AudioDevice(); -} - -RenderAudioSourceProvider::~RenderAudioSourceProvider() {} - -void RenderAudioSourceProvider::Start() { - base::AutoLock auto_lock(sink_lock_); - if (!client_) - default_sink_->Start(); - is_running_ = true; -} - -void RenderAudioSourceProvider::Stop() { - base::AutoLock auto_lock(sink_lock_); - if (!client_) - default_sink_->Stop(); - is_running_ = false; -} - -void RenderAudioSourceProvider::Play() { - base::AutoLock auto_lock(sink_lock_); - if (!client_) - default_sink_->Play(); - is_running_ = true; -} - -void RenderAudioSourceProvider::Pause(bool flush) { - base::AutoLock auto_lock(sink_lock_); - if (!client_) - default_sink_->Pause(flush); - is_running_ = false; -} - -bool RenderAudioSourceProvider::SetVolume(double volume) { - base::AutoLock auto_lock(sink_lock_); - if (!client_) - default_sink_->SetVolume(volume); - volume_ = volume; - return true; -} - -void RenderAudioSourceProvider::GetVolume(double* volume) { - if (!client_) - default_sink_->GetVolume(volume); - else if (volume) - *volume = volume_; -} - -void RenderAudioSourceProvider::Initialize( - size_t buffer_size, - int channels, - double sample_rate, - AudioParameters::Format latency_format, - RenderCallback* renderer) { - base::AutoLock auto_lock(sink_lock_); - CHECK(!is_initialized_); - renderer_ = renderer; - - default_sink_->Initialize(buffer_size, - channels, - sample_rate, - latency_format, - renderer); - - if (client_) { - // Inform WebKit about the audio stream format. - client_->setFormat(channels, sample_rate); - } - - // Keep track of the format in case the client hasn't yet been set. - channels_ = channels; - sample_rate_ = sample_rate; - is_initialized_ = true; -} - -void RenderAudioSourceProvider::setClient( - WebKit::WebAudioSourceProviderClient* client) { - // Synchronize with other uses of client_ and default_sink_. - base::AutoLock auto_lock(sink_lock_); - - if (client && client != client_) { - // Detach the audio renderer from normal playback. - default_sink_->Pause(true); - - // The client will now take control by calling provideInput() periodically. - client_ = client; - - if (is_initialized_) { - // The client needs to be notified of the audio format, if available. - // If the format is not yet available, we'll be notified later - // when Initialize() is called. - - // Inform WebKit about the audio stream format. - client->setFormat(channels_, sample_rate_); - } - } else if (!client && client_) { - // Restore normal playback. - client_ = NULL; - // TODO(crogers): We should call default_sink_->Play() if we're - // in the playing state. - } -} - -void RenderAudioSourceProvider::provideInput( - const WebVector<float*>& audio_data, size_t number_of_frames) { - DCHECK(client_); - - if (renderer_ && is_initialized_ && is_running_) { - // Wrap WebVector as std::vector. - vector<float*> v(audio_data.size()); - for (size_t i = 0; i < audio_data.size(); ++i) - v[i] = audio_data[i]; - - // TODO(crogers): figure out if we should volume scale here or in common - // WebAudio code. In any case we need to take care of volume. - renderer_->Render(v, number_of_frames, 0); - } else { - // Provide silence if the source is not running. - for (size_t i = 0; i < audio_data.size(); ++i) - memset(audio_data[i], 0, sizeof(float) * number_of_frames); - } -} diff --git a/content/renderer/render_audiosourceprovider.h b/content/renderer/render_audiosourceprovider.h deleted file mode 100644 index 02f6b73..0000000 --- a/content/renderer/render_audiosourceprovider.h +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// -// RenderAudioSourceProvider provides a bridge between classes: -// WebKit::WebAudioSourceProvider <---> media::AudioRendererSink -// -// RenderAudioSourceProvider is a "sink" of audio, and uses a default -// AudioDevice if a client has not explicitly been set. -// -// WebKit optionally sets a client, and then periodically calls provideInput() -// to render a certain number of audio sample-frames. provideInput() -// uses the renderer to get this data, and then massages it into the form -// required by provideInput(). In this case, the default AudioDevice -// is no longer used. -// -// THREAD SAFETY: -// It is assumed that the callers to setClient() and provideInput() -// implement appropriate locking for thread safety when making -// these calls. This happens in WebKit. - -#ifndef CONTENT_RENDERER_RENDER_AUDIOSOURCEPROVIDER_H_ -#define CONTENT_RENDERER_RENDER_AUDIOSOURCEPROVIDER_H_ - -#include <vector> - -#include "content/renderer/media/audio_device.h" -#include "media/base/audio_renderer_sink.h" -#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebVector.h" -#include "third_party/WebKit/Source/WebKit/chromium/public/WebAudioSourceProvider.h" - -namespace WebKit { -class WebAudioSourceProviderClient; -} - -class RenderAudioSourceProvider - : public WebKit::WebAudioSourceProvider, - public media::AudioRendererSink { - public: - RenderAudioSourceProvider(); - virtual ~RenderAudioSourceProvider(); - - // WebKit::WebAudioSourceProvider implementation. - - // WebKit calls setClient() if it desires to take control of the rendered - // audio stream. We call client's setFormat() when the audio stream format - // is known. - virtual void setClient(WebKit::WebAudioSourceProviderClient* client); - - // If setClient() has been called, then WebKit calls provideInput() - // periodically to get the rendered audio stream. - virtual void provideInput(const WebKit::WebVector<float*>& audio_data, - size_t number_of_frames); - - // AudioRendererSink implementation. - virtual void Start() OVERRIDE; - virtual void Stop() OVERRIDE; - virtual void Play() OVERRIDE; - virtual void Pause(bool flush) OVERRIDE; - virtual bool SetVolume(double volume) OVERRIDE; - virtual void GetVolume(double* volume) OVERRIDE; - virtual void Initialize(size_t buffer_size, - int channels, - double sample_rate, - AudioParameters::Format latency_format, - RenderCallback* renderer) OVERRIDE; - - private: - // Set to true when Initialize() is called. - bool is_initialized_; - int channels_; - double sample_rate_; - - bool is_running_; - double volume_; - media::AudioRendererSink::RenderCallback* renderer_; - WebKit::WebAudioSourceProviderClient* client_; - - // Protects access to sink_ - base::Lock sink_lock_; - - // default_sink_ is the default sink. - scoped_refptr<media::AudioRendererSink> default_sink_; - - DISALLOW_COPY_AND_ASSIGN(RenderAudioSourceProvider); -}; - -#endif // CONTENT_RENDERER_RENDER_AUDIOSOURCEPROVIDER_H_ diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index 53f68bf..515ef64 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc @@ -65,7 +65,6 @@ #include "content/renderer/notification_provider.h" #include "content/renderer/p2p/socket_dispatcher.h" #include "content/renderer/plugin_channel_host.h" -#include "content/renderer/render_audiosourceprovider.h" #include "content/renderer/render_process.h" #include "content/renderer/render_thread_impl.h" #include "content/renderer/render_widget_fullscreen_pepper.h" @@ -1932,20 +1931,11 @@ WebMediaPlayer* RenderViewImpl::createMediaPlayer( media::FilterCollection* collection = new media::FilterCollection(); RenderMediaLog* render_media_log = new RenderMediaLog(); - RenderAudioSourceProvider* audio_source_provider = NULL; - // Add in any custom filter factories first. const CommandLine* cmd_line = CommandLine::ForCurrentProcess(); if (!cmd_line->HasSwitch(switches::kDisableAudio)) { - // audio_source_provider is a "provider" to WebKit, and a sink - // from the perspective of the audio renderer. - audio_source_provider = new RenderAudioSourceProvider(); - - // Add the chrome specific audio renderer, using audio_source_provider - // as the sink. - AudioRendererImpl* audio_renderer = - new AudioRendererImpl(audio_source_provider); - collection->AddAudioRenderer(audio_renderer); + // Add the chrome specific audio renderer. + collection->AddAudioRenderer(new AudioRendererImpl()); } #if defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL) @@ -1969,12 +1959,11 @@ WebMediaPlayer* RenderViewImpl::createMediaPlayer( webkit_media::WebMediaPlayerImpl* result_ptr; if (!content::GetContentClient()->renderer()->OverrideCreateWebMediaPlayer( - this, client, AsWeakPtr(), collection, audio_source_provider, - message_loop_factory, media_stream_impl_.get(), render_media_log, - &result_ptr)) { + this, client, AsWeakPtr(), collection, message_loop_factory, + media_stream_impl_.get(), render_media_log, &result_ptr)) { result_ptr = new webkit_media::WebMediaPlayerImpl( - client, AsWeakPtr(), collection, audio_source_provider, - message_loop_factory, media_stream_impl_.get(), render_media_log); + client, AsWeakPtr(), collection, message_loop_factory, + media_stream_impl_.get(), render_media_log); } DCHECK(result_ptr); diff --git a/content/shell/shell_content_renderer_client.cc b/content/shell/shell_content_renderer_client.cc index ddf3c44..ac09373 100644 --- a/content/shell/shell_content_renderer_client.cc +++ b/content/shell/shell_content_renderer_client.cc @@ -53,7 +53,6 @@ bool ShellContentRendererClient::OverrideCreateWebMediaPlayer( WebKit::WebMediaPlayerClient* client, base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate, media::FilterCollection* collection, - WebKit::WebAudioSourceProvider* audio_source_provider, media::MessageLoopFactory* message_loop_factory, webkit_media::MediaStreamClient* media_stream_client, media::MediaLog* media_log, diff --git a/content/shell/shell_content_renderer_client.h b/content/shell/shell_content_renderer_client.h index e0cdc87..36d428e 100644 --- a/content/shell/shell_content_renderer_client.h +++ b/content/shell/shell_content_renderer_client.h @@ -36,7 +36,6 @@ class ShellContentRendererClient : public ContentRendererClient { WebKit::WebMediaPlayerClient* client, base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate, media::FilterCollection* collection, - WebKit::WebAudioSourceProvider* audio_source_provider, media::MessageLoopFactory* message_loop_factory, webkit_media::MediaStreamClient* media_stream_client, media::MediaLog* media_log, diff --git a/media/base/audio_renderer_sink.h b/media/base/audio_renderer_sink.h deleted file mode 100644 index fc7bb9b..0000000 --- a/media/base/audio_renderer_sink.h +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef MEDIA_BASE_AUDIO_RENDERER_SINK_H_ -#define MEDIA_BASE_AUDIO_RENDERER_SINK_H_ - -#include <vector> -#include "base/basictypes.h" -#include "base/memory/ref_counted.h" -#include "base/memory/scoped_ptr.h" -#include "media/audio/audio_parameters.h" - -namespace media { - -// AudioRendererSink is an interface representing the end-point for -// rendered audio. An implementation is expected to -// periodically call Render() on a callback object. - -class AudioRendererSink - : public base::RefCountedThreadSafe<media::AudioRendererSink> { - public: - class RenderCallback { - public: - // Fills entire buffer of length |number_of_frames| but returns actual - // number of frames it got from its source (|number_of_frames| in case of - // continuous stream). That actual number of frames is passed to host - // together with PCM audio data and host is free to use or ignore it. - // TODO(crogers): use base:Callback instead. - virtual size_t Render(const std::vector<float*>& audio_data, - size_t number_of_frames, - size_t audio_delay_milliseconds) = 0; - - protected: - virtual ~RenderCallback() {} - }; - - virtual ~AudioRendererSink() {} - - // Sets important information about the audio stream format. - // It must be called before any of the other methods. - virtual void Initialize(size_t buffer_size, - int channels, - double sample_rate, - AudioParameters::Format latency_format, - RenderCallback* callback) = 0; - - // Starts audio playback. - virtual void Start() = 0; - - // Stops audio playback. - virtual void Stop() = 0; - - // Pauses playback. - virtual void Pause(bool flush) = 0; - - // Resumes playback after calling Pause(). - virtual void Play() = 0; - - // Sets the playback volume, with range [0.0, 1.0] inclusive. - // Returns |true| on success. - virtual bool SetVolume(double volume) = 0; - - // Gets the playback volume, with range [0.0, 1.0] inclusive. - virtual void GetVolume(double* volume) = 0; -}; - -} // namespace media - -#endif // MEDIA_BASE_AUDIO_RENDERER_SINK_H_ diff --git a/webkit/media/webmediaplayer_impl.cc b/webkit/media/webmediaplayer_impl.cc index 2bb0e65..4753202 100644 --- a/webkit/media/webmediaplayer_impl.cc +++ b/webkit/media/webmediaplayer_impl.cc @@ -102,7 +102,6 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( WebKit::WebMediaPlayerClient* client, base::WeakPtr<WebMediaPlayerDelegate> delegate, media::FilterCollection* collection, - WebKit::WebAudioSourceProvider* audio_source_provider, media::MessageLoopFactory* message_loop_factory, MediaStreamClient* media_stream_client, media::MediaLog* media_log) @@ -123,8 +122,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( media_stream_client_(media_stream_client), media_log_(media_log), is_accelerated_compositing_active_(false), - incremented_externally_allocated_memory_(false), - audio_source_provider_(audio_source_provider) { + incremented_externally_allocated_memory_(false) { // Saves the current message loop. DCHECK(!main_loop_); main_loop_ = MessageLoop::current(); @@ -936,10 +934,6 @@ WebKit::WebMediaPlayerClient* WebMediaPlayerImpl::GetClient() { return client_; } -WebKit::WebAudioSourceProvider* WebMediaPlayerImpl::audioSourceProvider() { - return audio_source_provider_; -} - void WebMediaPlayerImpl::IncrementExternallyAllocatedMemory() { DCHECK_EQ(main_loop_, MessageLoop::current()); incremented_externally_allocated_memory_ = true; diff --git a/webkit/media/webmediaplayer_impl.h b/webkit/media/webmediaplayer_impl.h index b9600ec..7b5cd60 100644 --- a/webkit/media/webmediaplayer_impl.h +++ b/webkit/media/webmediaplayer_impl.h @@ -52,19 +52,14 @@ #include "base/memory/scoped_ptr.h" #include "base/memory/weak_ptr.h" #include "base/message_loop.h" -#include "media/base/audio_renderer_sink.h" #include "media/base/filters.h" #include "media/base/message_loop_factory.h" #include "media/base/pipeline.h" #include "skia/ext/platform_canvas.h" -#include "third_party/WebKit/Source/WebKit/chromium/public/WebAudioSourceProvider.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayer.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayerClient.h" -class RenderAudioSourceProvider; - namespace WebKit { -class WebAudioSourceProvider; class WebFrame; } @@ -103,13 +98,11 @@ class WebMediaPlayerImpl // audio renderer is a fake audio device that plays silence. Provider of the // |collection| can override the default filters by adding extra filters to // |collection| before calling this method. - // This object takes ownership of the |audio_source_provider|. // // Callers must call |Initialize()| before they can use the object. WebMediaPlayerImpl(WebKit::WebMediaPlayerClient* client, base::WeakPtr<WebMediaPlayerDelegate> delegate, media::FilterCollection* collection, - WebKit::WebAudioSourceProvider* audio_source_provider, media::MessageLoopFactory* message_loop_factory, MediaStreamClient* media_stream_client, media::MediaLog* media_log); @@ -179,8 +172,6 @@ class WebMediaPlayerImpl virtual WebKit::WebVideoFrame* getCurrentFrame(); virtual void putCurrentFrame(WebKit::WebVideoFrame* web_video_frame); - virtual WebKit::WebAudioSourceProvider* audioSourceProvider(); - virtual bool sourceAppend(const unsigned char* data, unsigned length); virtual void sourceEndOfStream(EndOfStreamStatus status); @@ -274,8 +265,6 @@ class WebMediaPlayerImpl bool incremented_externally_allocated_memory_; - WebKit::WebAudioSourceProvider* audio_source_provider_; - DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImpl); }; diff --git a/webkit/support/webkit_support.cc b/webkit/support/webkit_support.cc index 80200a2..25a7be0 100644 --- a/webkit/support/webkit_support.cc +++ b/webkit/support/webkit_support.cc @@ -319,7 +319,6 @@ WebKit::WebMediaPlayer* CreateMediaPlayer(WebFrame* frame, client, base::WeakPtr<webkit_media::WebMediaPlayerDelegate>(), collection.release(), - NULL, message_loop_factory.release(), NULL, new media::MediaLog())); diff --git a/webkit/tools/test_shell/test_webview_delegate.cc b/webkit/tools/test_shell/test_webview_delegate.cc index 412fbd3..8938599 100644 --- a/webkit/tools/test_shell/test_webview_delegate.cc +++ b/webkit/tools/test_shell/test_webview_delegate.cc @@ -652,7 +652,6 @@ WebMediaPlayer* TestWebViewDelegate::createMediaPlayer( client, base::WeakPtr<webkit_media::WebMediaPlayerDelegate>(), collection.release(), - NULL, message_loop_factory.release(), NULL, new media::MediaLog())); |