summaryrefslogtreecommitdiffstats
path: root/webkit/glue/webmediaplayer_impl.cc
diff options
context:
space:
mode:
authoracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-15 07:09:27 +0000
committeracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-15 07:09:27 +0000
commitf78d1dfc8d92a6667a355e90da7f2f100c89b832 (patch)
treebcba6d266d612b0df072cf32241c83d1ba6b897a /webkit/glue/webmediaplayer_impl.cc
parent4e425be43fae960cad4dc81be0181bf99f2f7080 (diff)
downloadchromium_src-f78d1dfc8d92a6667a355e90da7f2f100c89b832.zip
chromium_src-f78d1dfc8d92a6667a355e90da7f2f100c89b832.tar.gz
chromium_src-f78d1dfc8d92a6667a355e90da7f2f100c89b832.tar.bz2
Remove MessageLoop methods from Filter interface to
separate Filter management from MessageLoop management. This sets the stage for filters to share threads in the future which will reduce resource consumption when multiple <video> tags are on the same page. BUG=69451 TEST=None Review URL: http://codereview.chromium.org/6171009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@71548 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue/webmediaplayer_impl.cc')
-rw-r--r--webkit/glue/webmediaplayer_impl.cc24
1 files changed, 15 insertions, 9 deletions
diff --git a/webkit/glue/webmediaplayer_impl.cc b/webkit/glue/webmediaplayer_impl.cc
index 005c7cf..3bfb6a9 100644
--- a/webkit/glue/webmediaplayer_impl.cc
+++ b/webkit/glue/webmediaplayer_impl.cc
@@ -225,13 +225,14 @@ void WebMediaPlayerImpl::Proxy::PutCurrentFrame(
WebMediaPlayerImpl::WebMediaPlayerImpl(
WebKit::WebMediaPlayerClient* client,
- media::FilterCollection* collection)
+ media::FilterCollection* collection,
+ media::MessageLoopFactory* message_loop_factory)
: network_state_(WebKit::WebMediaPlayer::Empty),
ready_state_(WebKit::WebMediaPlayer::HaveNothing),
main_loop_(NULL),
filter_collection_(collection),
pipeline_(NULL),
- pipeline_thread_("PipelineThread"),
+ message_loop_factory_(message_loop_factory),
paused_(true),
seeking_(false),
playback_rate_(0.0f),
@@ -247,13 +248,14 @@ bool WebMediaPlayerImpl::Initialize(
WebKit::WebFrame* frame,
bool use_simple_data_source,
scoped_refptr<WebVideoRenderer> web_video_renderer) {
- // Create the pipeline and its thread.
- if (!pipeline_thread_.Start()) {
+ MessageLoop* pipeline_message_loop =
+ message_loop_factory_->GetMessageLoop("PipelineThread");
+ if (!pipeline_message_loop) {
NOTREACHED() << "Could not start PipelineThread";
return false;
}
- pipeline_ = new media::PipelineImpl(pipeline_thread_.message_loop());
+ pipeline_ = new media::PipelineImpl(pipeline_message_loop);
// Also we want to be notified of |main_loop_| destruction.
main_loop_->AddDestructionObserver(this);
@@ -290,9 +292,12 @@ bool WebMediaPlayerImpl::Initialize(
}
// Add in the default filter factories.
- filter_collection_->AddDemuxer(new media::FFmpegDemuxer());
- filter_collection_->AddAudioDecoder(new media::FFmpegAudioDecoder());
- filter_collection_->AddVideoDecoder(new media::FFmpegVideoDecoder(NULL));
+ filter_collection_->AddDemuxer(new media::FFmpegDemuxer(
+ message_loop_factory_->GetMessageLoop("DemuxThread")));
+ filter_collection_->AddAudioDecoder(new media::FFmpegAudioDecoder(
+ message_loop_factory_->GetMessageLoop("AudioDecoderThread")));
+ filter_collection_->AddVideoDecoder(new media::FFmpegVideoDecoder(
+ message_loop_factory_->GetMessageLoop("VideoDecoderThread"), NULL));
filter_collection_->AddAudioRenderer(new media::NullAudioRenderer());
return true;
@@ -794,9 +799,10 @@ void WebMediaPlayerImpl::Destroy() {
pipeline_->Stop(NewCallback(this,
&WebMediaPlayerImpl::PipelineStoppedCallback));
pipeline_stopped_.Wait();
- pipeline_thread_.Stop();
}
+ message_loop_factory_.reset();
+
// And then detach the proxy, it may live on the render thread for a little
// longer until all the tasks are finished.
if (proxy_) {