diff options
author | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-15 07:09:27 +0000 |
---|---|---|
committer | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-15 07:09:27 +0000 |
commit | f78d1dfc8d92a6667a355e90da7f2f100c89b832 (patch) | |
tree | bcba6d266d612b0df072cf32241c83d1ba6b897a /media/tools/player_x11 | |
parent | 4e425be43fae960cad4dc81be0181bf99f2f7080 (diff) | |
download | chromium_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 'media/tools/player_x11')
-rw-r--r-- | media/tools/player_x11/player_x11.cc | 25 | ||||
-rw-r--r-- | media/tools/player_x11/x11_video_renderer.h | 2 |
2 files changed, 21 insertions, 6 deletions
diff --git a/media/tools/player_x11/player_x11.cc b/media/tools/player_x11/player_x11.cc index df9bd619..2e75994 100644 --- a/media/tools/player_x11/player_x11.cc +++ b/media/tools/player_x11/player_x11.cc @@ -17,6 +17,7 @@ #include "media/base/filter_collection.h" #include "media/base/media.h" #include "media/base/media_switches.h" +#include "media/base/message_loop_factory_impl.h" #include "media/base/pipeline_impl.h" #include "media/filters/audio_renderer_impl.h" #include "media/filters/ffmpeg_audio_decoder.h" @@ -83,7 +84,8 @@ bool InitX11() { bool InitPipeline(MessageLoop* message_loop, const char* filename, bool enable_audio, scoped_refptr<media::PipelineImpl>* pipeline, - MessageLoop* paint_message_loop) { + MessageLoop* paint_message_loop, + media::MessageLoopFactory* message_loop_factory) { // Initialize OpenMAX. if (CommandLine::ForCurrentProcess()->HasSwitch( switches::kEnableOpenMax) && @@ -102,13 +104,19 @@ bool InitPipeline(MessageLoop* message_loop, scoped_ptr<media::FilterCollection> collection( new media::FilterCollection()); collection->AddDataSource(new media::FileDataSource()); - collection->AddDemuxer(new media::FFmpegDemuxer()); - collection->AddAudioDecoder(new media::FFmpegAudioDecoder()); + collection->AddDemuxer(new media::FFmpegDemuxer( + message_loop_factory->GetMessageLoop("DemuxThread"))); + collection->AddAudioDecoder(new media::FFmpegAudioDecoder( + message_loop_factory->GetMessageLoop("AudioDecoderThread"))); if (CommandLine::ForCurrentProcess()->HasSwitch( switches::kEnableOpenMax)) { - collection->AddVideoDecoder(new media::OmxVideoDecoder(NULL)); + collection->AddVideoDecoder(new media::OmxVideoDecoder( + message_loop_factory->GetMessageLoop("VideoDecoderThread"), + NULL)); } else { - collection->AddVideoDecoder(new media::FFmpegVideoDecoder(NULL)); + collection->AddVideoDecoder(new media::FFmpegVideoDecoder( + message_loop_factory->GetMessageLoop("VideoDecoderThread"), + NULL)); } collection->AddVideoRenderer(new Renderer(g_display, g_window, @@ -244,13 +252,16 @@ int main(int argc, char** argv) { // Initialize the pipeline thread and the pipeline. base::AtExitManager at_exit; + scoped_ptr<media::MessageLoopFactory> message_loop_factory( + new media::MessageLoopFactoryImpl()); scoped_ptr<base::Thread> thread; scoped_refptr<media::PipelineImpl> pipeline; MessageLoop message_loop; thread.reset(new base::Thread("PipelineThread")); thread->Start(); if (InitPipeline(thread->message_loop(), filename.c_str(), - enable_audio, &pipeline, &message_loop)) { + enable_audio, &pipeline, &message_loop, + message_loop_factory.get())) { // Main loop of the application. g_running = true; @@ -266,6 +277,8 @@ int main(int argc, char** argv) { } // Cleanup tasks. + message_loop_factory.reset(); + thread->Stop(); XDestroyWindow(g_display, g_window); XCloseDisplay(g_display); diff --git a/media/tools/player_x11/x11_video_renderer.h b/media/tools/player_x11/x11_video_renderer.h index 0129b60..fd5c12e 100644 --- a/media/tools/player_x11/x11_video_renderer.h +++ b/media/tools/player_x11/x11_video_renderer.h @@ -11,6 +11,8 @@ #include "media/base/filters.h" #include "media/filters/video_renderer_base.h" +class MessageLoop; + class X11VideoRenderer : public media::VideoRendererBase { public: X11VideoRenderer(Display* display, Window window, MessageLoop* message_loop); |