summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authorfischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-18 04:10:19 +0000
committerfischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-18 04:10:19 +0000
commit2c539b896f7cd8e1ff6a1209418a5c7d15b3b6bc (patch)
tree71507e063e3510e1de2c30a41169f13359391e8d /webkit
parent546fc9db98435eb806293d51d824cec8388a4008 (diff)
downloadchromium_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.cc23
-rw-r--r--webkit/media/webmediaplayer_proxy.cc58
-rw-r--r--webkit/media/webmediaplayer_proxy.h25
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();