summaryrefslogtreecommitdiffstats
path: root/media/tools
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 /media/tools
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 'media/tools')
-rw-r--r--media/tools/player_wtl/movie.cc21
-rw-r--r--media/tools/player_wtl/movie.h4
-rw-r--r--media/tools/player_wtl/view.h1
-rw-r--r--media/tools/player_x11/player_x11.cc25
-rw-r--r--media/tools/player_x11/x11_video_renderer.h2
5 files changed, 37 insertions, 16 deletions
diff --git a/media/tools/player_wtl/movie.cc b/media/tools/player_wtl/movie.cc
index 2efd715..fe73490 100644
--- a/media/tools/player_wtl/movie.cc
+++ b/media/tools/player_wtl/movie.cc
@@ -8,6 +8,7 @@
#include "base/threading/platform_thread.h"
#include "base/utf_string_conversions.h"
#include "media/base/filter_collection.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"
@@ -60,12 +61,17 @@ bool Movie::Open(const wchar_t* url, WtlVideoRenderer* video_renderer) {
Close();
}
+ message_loop_factory_.reset(new media::MessageLoopFactoryImpl());
+
// Create filter collection.
scoped_ptr<FilterCollection> collection(new FilterCollection());
collection->AddDataSource(new FileDataSource());
- collection->AddAudioDecoder(new FFmpegAudioDecoder());
- collection->AddDemuxer(new FFmpegDemuxer());
- collection->AddVideoDecoder(new FFmpegVideoDecoder(NULL));
+ collection->AddAudioDecoder(new FFmpegAudioDecoder(
+ message_loop_factory_->GetMessageLoop("AudioDecoderThread")));
+ collection->AddDemuxer(new FFmpegDemuxer(
+ message_loop_factory_->GetMessageLoop("DemuxThread")));
+ collection->AddVideoDecoder(new FFmpegVideoDecoder(
+ message_loop_factory_->GetMessageLoop("VideoDecoderThread"), NULL));
if (enable_audio_) {
collection->AddAudioRenderer(new AudioRendererImpl());
@@ -74,9 +80,8 @@ bool Movie::Open(const wchar_t* url, WtlVideoRenderer* video_renderer) {
}
collection->AddVideoRenderer(video_renderer);
- thread_.reset(new base::Thread("PipelineThread"));
- thread_->Start();
- pipeline_ = new PipelineImpl(thread_->message_loop());
+ pipeline_ = new PipelineImpl(
+ message_loop_factory_->GetMessageLoop("PipelineThread"));
// Create and start our pipeline.
pipeline_->Start(collection.release(), WideToUTF8(std::wstring(url)), NULL);
@@ -168,10 +173,10 @@ bool Movie::GetDumpYuvFileEnable() {
void Movie::Close() {
if (pipeline_) {
pipeline_->Stop(NULL);
- thread_->Stop();
pipeline_ = NULL;
- thread_.reset();
}
+
+ message_loop_factory_.reset();
}
} // namespace media
diff --git a/media/tools/player_wtl/movie.h b/media/tools/player_wtl/movie.h
index ea81b09..00708f9 100644
--- a/media/tools/player_wtl/movie.h
+++ b/media/tools/player_wtl/movie.h
@@ -11,7 +11,7 @@
#include "base/ref_counted.h"
#include "base/scoped_ptr.h"
-#include "base/threading/thread.h"
+#include "media/base/message_loop_factory.h"
template <typename T> struct DefaultSingletonTraits;
class WtlVideoRenderer;
@@ -83,7 +83,7 @@ class Movie {
virtual ~Movie();
scoped_refptr<PipelineImpl> pipeline_;
- scoped_ptr<base::Thread> thread_;
+ scoped_ptr<media::MessageLoopFactory> message_loop_factory_;
bool enable_audio_;
bool enable_draw_;
diff --git a/media/tools/player_wtl/view.h b/media/tools/player_wtl/view.h
index cbb0a48..5273cd5 100644
--- a/media/tools/player_wtl/view.h
+++ b/media/tools/player_wtl/view.h
@@ -9,6 +9,7 @@
#include <process.h>
#include <string.h>
+#include "base/logging.h"
#include "media/base/video_frame.h"
#include "media/base/yuv_convert.h"
#include "media/tools/player_wtl/movie.h"
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);