| Index: webkit/media/webmediaplayer_impl.cc
|
| diff --git a/webkit/media/webmediaplayer_impl.cc b/webkit/media/webmediaplayer_impl.cc
|
| index 706ca8411d0ec36febdc81a3acccf6874c5a5df1..d03aa85a99f41e07547f1a430bf6a1e9ea4eb49f 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());
|
| @@ -159,7 +164,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 +261,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");
|
|
|
| @@ -335,8 +340,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 +971,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) {
|
|
|