diff options
Diffstat (limited to 'webkit/renderer/media')
-rw-r--r-- | webkit/renderer/media/webmediaplayer_impl.cc | 30 | ||||
-rw-r--r-- | webkit/renderer/media/webmediaplayer_impl.h | 2 | ||||
-rw-r--r-- | webkit/renderer/media/webmediaplayer_params.cc | 6 | ||||
-rw-r--r-- | webkit/renderer/media/webmediaplayer_params.h | 13 |
4 files changed, 22 insertions, 29 deletions
diff --git a/webkit/renderer/media/webmediaplayer_impl.cc b/webkit/renderer/media/webmediaplayer_impl.cc index 2f06d8a..d277105 100644 --- a/webkit/renderer/media/webmediaplayer_impl.cc +++ b/webkit/renderer/media/webmediaplayer_impl.cc @@ -130,7 +130,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( network_state_(WebMediaPlayer::NetworkStateEmpty), ready_state_(WebMediaPlayer::ReadyStateHaveNothing), main_loop_(base::MessageLoopProxy::current()), - media_loop_(params.message_loop_proxy()), + media_thread_("MediaPipeline"), paused_(true), seeking_(false), playback_rate_(0.0f), @@ -153,7 +153,9 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( media_log_->AddEvent( media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED)); - pipeline_.reset(new media::Pipeline(media_loop_, media_log_)); + CHECK(media_thread_.Start()); + pipeline_.reset(new media::Pipeline( + media_thread_.message_loop_proxy(), media_log_)); // Let V8 know we started new thread if we did not do it yet. // Made separate task to avoid deletion of player currently being created. @@ -182,7 +184,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( // Use the null sink if no sink was provided. audio_source_provider_ = new WebAudioSourceProviderImpl( params.audio_renderer_sink() ? params.audio_renderer_sink() : - new media::NullAudioSink(media_loop_)); + new media::NullAudioSink(media_thread_.message_loop_proxy())); } WebMediaPlayerImpl::~WebMediaPlayerImpl() { @@ -1053,7 +1055,7 @@ void WebMediaPlayerImpl::StartPipeline(WebKit::WebMediaSource* media_source) { DCHECK(data_source_); demuxer_.reset(new media::FFmpegDemuxer( - media_loop_, data_source_.get(), + media_thread_.message_loop_proxy(), data_source_.get(), BIND_TO_RENDER_LOOP_2(&WebMediaPlayerImpl::OnNeedKey, "", ""))); } else { DCHECK(!chunk_demuxer_); @@ -1086,13 +1088,15 @@ void WebMediaPlayerImpl::StartPipeline(WebKit::WebMediaSource* media_source) { // Create our audio decoders and renderer. ScopedVector<media::AudioDecoder> audio_decoders; - audio_decoders.push_back(new media::FFmpegAudioDecoder(media_loop_)); + audio_decoders.push_back(new media::FFmpegAudioDecoder( + media_thread_.message_loop_proxy())); if (cmd_line->HasSwitch(switches::kEnableOpusPlayback)) { - audio_decoders.push_back(new media::OpusAudioDecoder(media_loop_)); + audio_decoders.push_back(new media::OpusAudioDecoder( + media_thread_.message_loop_proxy())); } scoped_ptr<media::AudioRenderer> audio_renderer( - new media::AudioRendererImpl(media_loop_, + new media::AudioRendererImpl(media_thread_.message_loop_proxy(), audio_source_provider_, audio_decoders.Pass(), set_decryptor_ready_cb)); @@ -1103,7 +1107,7 @@ void WebMediaPlayerImpl::StartPipeline(WebKit::WebMediaSource* media_source) { if (gpu_factories_) { video_decoders.push_back(new media::GpuVideoDecoder( - media_loop_, gpu_factories_)); + media_thread_.message_loop_proxy(), gpu_factories_)); } // TODO(phajdan.jr): Remove ifdefs when libvpx with vp9 support is released @@ -1111,15 +1115,17 @@ void WebMediaPlayerImpl::StartPipeline(WebKit::WebMediaSource* media_source) { #if !defined(MEDIA_DISABLE_LIBVPX) if (cmd_line->HasSwitch(switches::kEnableVp9Playback) || cmd_line->HasSwitch(switches::kEnableVp8AlphaPlayback)) { - video_decoders.push_back(new media::VpxVideoDecoder(media_loop_)); + video_decoders.push_back(new media::VpxVideoDecoder( + media_thread_.message_loop_proxy())); } #endif // !defined(MEDIA_DISABLE_LIBVPX) - video_decoders.push_back(new media::FFmpegVideoDecoder(media_loop_)); + video_decoders.push_back(new media::FFmpegVideoDecoder( + media_thread_.message_loop_proxy())); scoped_ptr<media::VideoRenderer> video_renderer( new media::VideoRendererBase( - media_loop_, + media_thread_.message_loop_proxy(), video_decoders.Pass(), set_decryptor_ready_cb, base::Bind(&WebMediaPlayerImpl::FrameReady, base::Unretained(this)), @@ -1189,6 +1195,8 @@ void WebMediaPlayerImpl::Destroy() { incremented_externally_allocated_memory_ = false; } + media_thread_.Stop(); + // Release any final references now that everything has stopped. pipeline_.reset(); demuxer_.reset(); diff --git a/webkit/renderer/media/webmediaplayer_impl.h b/webkit/renderer/media/webmediaplayer_impl.h index 0049369..04c0fb4 100644 --- a/webkit/renderer/media/webmediaplayer_impl.h +++ b/webkit/renderer/media/webmediaplayer_impl.h @@ -287,7 +287,7 @@ class WebMediaPlayerImpl const scoped_refptr<base::MessageLoopProxy> main_loop_; scoped_ptr<media::Pipeline> pipeline_; - scoped_refptr<base::MessageLoopProxy> media_loop_; + base::Thread media_thread_; // The currently selected key system. Empty string means that no key system // has been selected. diff --git a/webkit/renderer/media/webmediaplayer_params.cc b/webkit/renderer/media/webmediaplayer_params.cc index 3592494..d33c12b 100644 --- a/webkit/renderer/media/webmediaplayer_params.cc +++ b/webkit/renderer/media/webmediaplayer_params.cc @@ -4,22 +4,18 @@ #include "webkit/renderer/media/webmediaplayer_params.h" -#include "base/message_loop_proxy.h" #include "media/base/audio_renderer_sink.h" #include "media/base/media_log.h" namespace webkit_media { WebMediaPlayerParams::WebMediaPlayerParams( - const scoped_refptr<base::MessageLoopProxy>& message_loop_proxy, const scoped_refptr<media::AudioRendererSink>& audio_renderer_sink, const scoped_refptr<media::GpuVideoDecoder::Factories>& gpu_factories, const scoped_refptr<media::MediaLog>& media_log) - : message_loop_proxy_(message_loop_proxy), - audio_renderer_sink_(audio_renderer_sink), + : audio_renderer_sink_(audio_renderer_sink), gpu_factories_(gpu_factories), media_log_(media_log) { - DCHECK(message_loop_proxy); DCHECK(media_log_); } diff --git a/webkit/renderer/media/webmediaplayer_params.h b/webkit/renderer/media/webmediaplayer_params.h index 62a5ce1..893cae7 100644 --- a/webkit/renderer/media/webmediaplayer_params.h +++ b/webkit/renderer/media/webmediaplayer_params.h @@ -8,10 +8,6 @@ #include "base/memory/ref_counted.h" #include "media/filters/gpu_video_decoder.h" -namespace base { -class MessageLoopProxy; -} - namespace media { class AudioRendererSink; class MediaLog; @@ -23,19 +19,13 @@ namespace webkit_media { // to plumb arguments through various abstraction layers. class WebMediaPlayerParams { public: - // |message_loop_proxy| and |media_log| are the only required parameters; - // all others may be null. + // |media_log| is the only required parameter; all others may be null. WebMediaPlayerParams( - const scoped_refptr<base::MessageLoopProxy>& message_loop_proxy, const scoped_refptr<media::AudioRendererSink>& audio_renderer_sink, const scoped_refptr<media::GpuVideoDecoder::Factories>& gpu_factories, const scoped_refptr<media::MediaLog>& media_log); ~WebMediaPlayerParams(); - const scoped_refptr<base::MessageLoopProxy>& message_loop_proxy() const { - return message_loop_proxy_; - } - const scoped_refptr<media::AudioRendererSink>& audio_renderer_sink() const { return audio_renderer_sink_; } @@ -50,7 +40,6 @@ class WebMediaPlayerParams { } private: - scoped_refptr<base::MessageLoopProxy> message_loop_proxy_; scoped_refptr<media::AudioRendererSink> audio_renderer_sink_; scoped_refptr<media::GpuVideoDecoder::Factories> gpu_factories_; scoped_refptr<media::MediaLog> media_log_; |