diff options
author | fischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-18 04:10:19 +0000 |
---|---|---|
committer | fischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-18 04:10:19 +0000 |
commit | 2c539b896f7cd8e1ff6a1209418a5c7d15b3b6bc (patch) | |
tree | 71507e063e3510e1de2c30a41169f13359391e8d /webkit | |
parent | 546fc9db98435eb806293d51d824cec8388a4008 (diff) | |
download | chromium_src-2c539b896f7cd8e1ff6a1209418a5c7d15b3b6bc.zip chromium_src-2c539b896f7cd8e1ff6a1209418a5c7d15b3b6bc.tar.gz chromium_src-2c539b896f7cd8e1ff6a1209418a5c7d15b3b6bc.tar.bz2 |
media::BindToLoop() is born, with example uses to slim down WebMediaPlayerProxy.
WMPP could use further slimming-down / flamethrowering, but this pass just removes
the lowest-hanging fruit, where WMPP is used as a silent trampoline to WMPI on
the render thread.
Review URL: https://chromiumcodereview.appspot.com/10855188
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@152239 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/media/webmediaplayer_impl.cc | 23 | ||||
-rw-r--r-- | webkit/media/webmediaplayer_proxy.cc | 58 | ||||
-rw-r--r-- | webkit/media/webmediaplayer_proxy.h | 25 |
3 files changed, 13 insertions, 93 deletions
diff --git a/webkit/media/webmediaplayer_impl.cc b/webkit/media/webmediaplayer_impl.cc index 73d9072..e07b0d4 100644 --- a/webkit/media/webmediaplayer_impl.cc +++ b/webkit/media/webmediaplayer_impl.cc @@ -16,6 +16,7 @@ #include "base/string_number_conversions.h" #include "base/synchronization/waitable_event.h" #include "media/audio/null_audio_sink.h" +#include "media/base/bind_to_loop.h" #include "media/base/filter_collection.h" #include "media/base/limits.h" #include "media/base/media_log.h" @@ -90,6 +91,10 @@ COMPILE_ASSERT_MATCHING_ENUM(Anonymous); COMPILE_ASSERT_MATCHING_ENUM(UseCredentials); #undef COMPILE_ASSERT_MATCHING_ENUM +#define BIND_TO_RENDER_LOOP(function) \ + media::BindToLoop(main_loop_->message_loop_proxy(), base::Bind( \ + function, AsWeakPtr())) + static WebKit::WebTimeRanges ConvertToWebTimeRanges( const media::Ranges<base::TimeDelta>& ranges) { WebKit::WebTimeRanges result(ranges.size()); @@ -160,7 +165,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( scoped_refptr<media::VideoRendererBase> video_renderer = new media::VideoRendererBase( base::Bind(&WebMediaPlayerProxy::Repaint, proxy_), - base::Bind(&WebMediaPlayerProxy::SetOpaque, proxy_.get()), + BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::SetOpaque), true); filter_collection_->AddVideoRenderer(video_renderer); proxy_->set_frame_provider(video_renderer); @@ -257,12 +262,12 @@ void WebMediaPlayerImpl::load(const WebKit::WebURL& url, CORSMode cors_mode) { proxy_->set_data_source( new BufferedDataSource(main_loop_, frame_, media_log_, base::Bind(&WebMediaPlayerImpl::NotifyDownloading, - base::Unretained(this)))); + AsWeakPtr()))); proxy_->data_source()->Initialize( url, static_cast<BufferedResourceLoader::CORSMode>(cors_mode), base::Bind( &WebMediaPlayerImpl::DataSourceInitialized, - base::Unretained(this), gurl)); + AsWeakPtr(), gurl)); is_local_source_ = !gurl.SchemeIs("http") && !gurl.SchemeIs("https"); @@ -336,8 +341,7 @@ void WebMediaPlayerImpl::seek(float seconds) { // Kick off the asynchronous seek! pipeline_->Seek( seek_time, - base::Bind(&WebMediaPlayerProxy::PipelineSeekCallback, - proxy_.get())); + BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineSeek)); } void WebMediaPlayerImpl::setEndTime(float seconds) { @@ -969,11 +973,10 @@ void WebMediaPlayerImpl::StartPipeline() { starting_ = true; pipeline_->Start( filter_collection_.Pass(), - base::Bind(&WebMediaPlayerProxy::PipelineEndedCallback, proxy_.get()), - base::Bind(&WebMediaPlayerProxy::PipelineErrorCallback, proxy_.get()), - base::Bind(&WebMediaPlayerProxy::PipelineSeekCallback, proxy_.get()), - base::Bind(&WebMediaPlayerProxy::PipelineBufferingStateCallback, - proxy_.get())); + BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineEnded), + BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineError), + BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineSeek), + BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineBufferingState)); } void WebMediaPlayerImpl::SetNetworkState(WebMediaPlayer::NetworkState state) { diff --git a/webkit/media/webmediaplayer_proxy.cc b/webkit/media/webmediaplayer_proxy.cc index acb59e8..bd888c7 100644 --- a/webkit/media/webmediaplayer_proxy.cc +++ b/webkit/media/webmediaplayer_proxy.cc @@ -45,11 +45,6 @@ void WebMediaPlayerProxy::Repaint() { } } -void WebMediaPlayerProxy::SetOpaque(bool opaque) { - render_loop_->PostTask(FROM_HERE, base::Bind( - &WebMediaPlayerProxy::SetOpaqueTask, this, opaque)); -} - void WebMediaPlayerProxy::Paint(SkCanvas* canvas, const gfx::Rect& dest_rect, uint8_t alpha) { @@ -89,28 +84,6 @@ void WebMediaPlayerProxy::Detach() { frame_provider_ = NULL; } -void WebMediaPlayerProxy::PipelineSeekCallback(PipelineStatus status) { - render_loop_->PostTask(FROM_HERE, base::Bind( - &WebMediaPlayerProxy::PipelineSeekTask, this, status)); -} - -void WebMediaPlayerProxy::PipelineEndedCallback(PipelineStatus status) { - render_loop_->PostTask(FROM_HERE, base::Bind( - &WebMediaPlayerProxy::PipelineEndedTask, this, status)); -} - -void WebMediaPlayerProxy::PipelineErrorCallback(PipelineStatus error) { - DCHECK_NE(error, media::PIPELINE_OK); - render_loop_->PostTask(FROM_HERE, base::Bind( - &WebMediaPlayerProxy::PipelineErrorTask, this, error)); -} - -void WebMediaPlayerProxy::PipelineBufferingStateCallback( - media::Pipeline::BufferingState buffering_state) { - render_loop_->PostTask(FROM_HERE, base::Bind( - &WebMediaPlayerProxy::PipelineBufferingStateTask, this, buffering_state)); -} - void WebMediaPlayerProxy::RepaintTask() { DCHECK(render_loop_->BelongsToCurrentThread()); { @@ -123,37 +96,6 @@ void WebMediaPlayerProxy::RepaintTask() { } } -void WebMediaPlayerProxy::PipelineSeekTask(PipelineStatus status) { - DCHECK(render_loop_->BelongsToCurrentThread()); - if (webmediaplayer_) - webmediaplayer_->OnPipelineSeek(status); -} - -void WebMediaPlayerProxy::PipelineEndedTask(PipelineStatus status) { - DCHECK(render_loop_->BelongsToCurrentThread()); - if (webmediaplayer_) - webmediaplayer_->OnPipelineEnded(status); -} - -void WebMediaPlayerProxy::PipelineErrorTask(PipelineStatus error) { - DCHECK(render_loop_->BelongsToCurrentThread()); - if (webmediaplayer_) - webmediaplayer_->OnPipelineError(error); -} - -void WebMediaPlayerProxy::PipelineBufferingStateTask( - media::Pipeline::BufferingState buffering_state) { - DCHECK(render_loop_->BelongsToCurrentThread()); - if (webmediaplayer_) - webmediaplayer_->OnPipelineBufferingState(buffering_state); -} - -void WebMediaPlayerProxy::SetOpaqueTask(bool opaque) { - DCHECK(render_loop_->BelongsToCurrentThread()); - if (webmediaplayer_) - webmediaplayer_->SetOpaque(opaque); -} - void WebMediaPlayerProxy::GetCurrentFrame( scoped_refptr<media::VideoFrame>* frame_out) { if (frame_provider_) diff --git a/webkit/media/webmediaplayer_proxy.h b/webkit/media/webmediaplayer_proxy.h index 6c78d27..9e6ca4f 100644 --- a/webkit/media/webmediaplayer_proxy.h +++ b/webkit/media/webmediaplayer_proxy.h @@ -62,7 +62,6 @@ class WebMediaPlayerProxy // Methods for Filter -> WebMediaPlayerImpl communication. void Repaint(); - void SetOpaque(bool opaque); // Methods for WebMediaPlayerImpl -> Filter communication. void Paint(SkCanvas* canvas, const gfx::Rect& dest_rect, uint8_t alpha); @@ -74,13 +73,6 @@ class WebMediaPlayerProxy void AbortDataSource(); - // Methods for Pipeline -> WebMediaPlayerImpl communication. - void PipelineSeekCallback(media::PipelineStatus status); - void PipelineEndedCallback(media::PipelineStatus status); - void PipelineErrorCallback(media::PipelineStatus error); - void PipelineBufferingStateCallback( - media::Pipeline::BufferingState buffering_state); - // ChunkDemuxerClient implementation. virtual void DemuxerOpened(media::ChunkDemuxer* demuxer) OVERRIDE; virtual void DemuxerClosed() OVERRIDE; @@ -125,23 +117,6 @@ class WebMediaPlayerProxy // Invoke |webmediaplayer_| to perform a repaint. void RepaintTask(); - // Notify |webmediaplayer_| that a seek has finished. - void PipelineSeekTask(media::PipelineStatus status); - - // Notify |webmediaplayer_| that the media has ended. - void PipelineEndedTask(media::PipelineStatus status); - - // Notify |webmediaplayer_| that a pipeline error has occurred during - // playback. - void PipelineErrorTask(media::PipelineStatus error); - - // Notify |webmediaplayer_| of buffering state changes. - void PipelineBufferingStateTask( - media::Pipeline::BufferingState buffering_state); - - // Inform |webmediaplayer_| whether the video content is opaque. - void SetOpaqueTask(bool opaque); - void DemuxerOpenedTask(const scoped_refptr<media::ChunkDemuxer>& demuxer); void DemuxerClosedTask(); |