Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(384)

Unified Diff: webkit/media/webmediaplayer_impl.cc

Issue 10855188: media::BindToLoop() is born, with example uses to slim down WebMediaPlayerProxy. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: now with macro Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webkit/media/webmediaplayer_impl.cc
diff --git a/webkit/media/webmediaplayer_impl.cc b/webkit/media/webmediaplayer_impl.cc
index 706ca8411d0ec36febdc81a3acccf6874c5a5df1..3c485dab4ee8656d36c90aa44bf4b706fbe5dd23 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, weak_this_.GetWeakPtr()))
+
static WebKit::WebTimeRanges ConvertToWebTimeRanges(
const media::Ranges<base::TimeDelta>& ranges) {
WebKit::WebTimeRanges result(ranges.size());
@@ -132,7 +137,8 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
audio_renderer_sink_(audio_renderer_sink),
is_local_source_(false),
supports_save_(true),
- decryptor_(proxy_.get(), client, frame) {
+ decryptor_(proxy_.get(), client, frame),
+ weak_this_(this) {
media_log_->AddEvent(
media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED));
@@ -159,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);
@@ -256,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))));
+ weak_this_.GetWeakPtr())));
proxy_->data_source()->Initialize(
url, static_cast<BufferedResourceLoader::CORSMode>(cors_mode),
base::Bind(
&WebMediaPlayerImpl::DataSourceInitialized,
- base::Unretained(this), gurl));
+ weak_this_.GetWeakPtr(), gurl));
is_local_source_ = !gurl.SchemeIs("http") && !gurl.SchemeIs("https");
@@ -335,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) {
@@ -967,10 +972,9 @@ void WebMediaPlayerImpl::NotifyDownloading(bool is_downloading) {
void WebMediaPlayerImpl::StartPipeline() {
pipeline_->Start(
filter_collection_.Pass(),
- base::Bind(&WebMediaPlayerProxy::PipelineEndedCallback, proxy_.get()),
- base::Bind(&WebMediaPlayerProxy::PipelineErrorCallback, proxy_.get()),
- base::Bind(&WebMediaPlayerProxy::PipelineInitializationCallback,
- proxy_.get()));
+ BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineEnded),
+ BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineError),
+ BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineInitialize));
}
void WebMediaPlayerImpl::SetNetworkState(WebMediaPlayer::NetworkState state) {

Powered by Google App Engine
This is Rietveld 408576698