OLD | NEW |
---|---|
1 // Copyright (c) 2009-2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <iostream> | 5 #include <iostream> |
6 #include <signal.h> | 6 #include <signal.h> |
7 #include <X11/Xlib.h> | 7 #include <X11/Xlib.h> |
8 | 8 |
9 #include "base/at_exit.h" | 9 #include "base/at_exit.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
11 #include "base/file_path.h" | 11 #include "base/file_path.h" |
12 #include "base/scoped_ptr.h" | 12 #include "base/scoped_ptr.h" |
13 #include "base/thread.h" | 13 #include "base/thread.h" |
14 #include "media/base/media.h" | 14 #include "media/base/media.h" |
15 #include "media/base/media_switches.h" | 15 #include "media/base/media_switches.h" |
16 #include "media/base/pipeline_impl.h" | 16 #include "media/base/pipeline_impl.h" |
17 #include "media/filters/audio_renderer_impl.h" | 17 #include "media/filters/audio_renderer_impl.h" |
18 #include "media/filters/ffmpeg_audio_decoder.h" | 18 #include "media/filters/ffmpeg_audio_decoder.h" |
19 #include "media/filters/ffmpeg_demuxer.h" | 19 #include "media/filters/ffmpeg_demuxer.h" |
20 #include "media/filters/ffmpeg_video_decoder.h" | 20 #include "media/filters/ffmpeg_video_decoder.h" |
21 #include "media/filters/file_data_source.h" | 21 #include "media/filters/file_data_source.h" |
22 #include "media/filters/null_audio_renderer.h" | 22 #include "media/filters/null_audio_renderer.h" |
23 #include "media/filters/omx_video_decoder.h" | 23 #include "media/filters/omx_video_decoder.h" |
24 | |
25 #if defined(RENDERER_GL) | |
26 #include "media/tools/player_x11/gl_video_renderer.h" | |
27 #define Renderer GlVideoRenderer | |
scherkus (not reviewing)
2010/02/12 01:04:20
typedef doesn't work here?
| |
28 #elif RENDERER_GLES | |
29 #include "media/tools/player_x11/gles_video_renderer.h" | |
30 #define Renderer GlesVideoRenderer | |
31 #elif RENDERER_X11 | |
24 #include "media/tools/player_x11/x11_video_renderer.h" | 32 #include "media/tools/player_x11/x11_video_renderer.h" |
33 #define Renderer X11VideoRenderer | |
34 #endif | |
25 | 35 |
26 Display* g_display = NULL; | 36 Display* g_display = NULL; |
27 Window g_window = 0; | 37 Window g_window = 0; |
28 bool g_running = false; | 38 bool g_running = false; |
29 | 39 |
30 // Initialize X11. Returns true if successful. This method creates the X11 | 40 // Initialize X11. Returns true if successful. This method creates the X11 |
31 // window. Further initialization is done in X11VideoRenderer. | 41 // window. Further initialization is done in X11VideoRenderer. |
32 bool InitX11() { | 42 bool InitX11() { |
33 g_display = XOpenDisplay(NULL); | 43 g_display = XOpenDisplay(NULL); |
34 if (!g_display) { | 44 if (!g_display) { |
(...skipping 29 matching lines...) Expand all Loading... | |
64 scoped_refptr<media::FilterFactoryCollection> factories = | 74 scoped_refptr<media::FilterFactoryCollection> factories = |
65 new media::FilterFactoryCollection(); | 75 new media::FilterFactoryCollection(); |
66 factories->AddFactory(media::FileDataSource::CreateFactory()); | 76 factories->AddFactory(media::FileDataSource::CreateFactory()); |
67 factories->AddFactory(media::FFmpegAudioDecoder::CreateFactory()); | 77 factories->AddFactory(media::FFmpegAudioDecoder::CreateFactory()); |
68 factories->AddFactory(media::FFmpegDemuxer::CreateFilterFactory()); | 78 factories->AddFactory(media::FFmpegDemuxer::CreateFilterFactory()); |
69 if (CommandLine::ForCurrentProcess()->HasSwitch( | 79 if (CommandLine::ForCurrentProcess()->HasSwitch( |
70 switches::kEnableOpenMax)) { | 80 switches::kEnableOpenMax)) { |
71 factories->AddFactory(media::OmxVideoDecoder::CreateFactory()); | 81 factories->AddFactory(media::OmxVideoDecoder::CreateFactory()); |
72 } | 82 } |
73 factories->AddFactory(media::FFmpegVideoDecoder::CreateFactory()); | 83 factories->AddFactory(media::FFmpegVideoDecoder::CreateFactory()); |
74 factories->AddFactory(X11VideoRenderer::CreateFactory(g_display, g_window)); | 84 factories->AddFactory(Renderer::CreateFactory(g_display, g_window)); |
75 | 85 |
76 if (enable_audio) { | 86 if (enable_audio) { |
77 factories->AddFactory(media::AudioRendererImpl::CreateFilterFactory()); | 87 factories->AddFactory(media::AudioRendererImpl::CreateFilterFactory()); |
78 } else { | 88 } else { |
79 factories->AddFactory(media::NullAudioRenderer::CreateFilterFactory()); | 89 factories->AddFactory(media::NullAudioRenderer::CreateFilterFactory()); |
80 } | 90 } |
81 | 91 |
82 // Creates the pipeline and start it. | 92 // Creates the pipeline and start it. |
83 *pipeline = new media::PipelineImpl(message_loop); | 93 *pipeline = new media::PipelineImpl(message_loop); |
84 (*pipeline)->Start(factories, filename, NULL); | 94 (*pipeline)->Start(factories, filename, NULL); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
139 if (InitPipeline(thread->message_loop(), filename.c_str(), | 149 if (InitPipeline(thread->message_loop(), filename.c_str(), |
140 enable_audio, &pipeline)) { | 150 enable_audio, &pipeline)) { |
141 // Main loop of the application. | 151 // Main loop of the application. |
142 g_running = true; | 152 g_running = true; |
143 while (g_running) { | 153 while (g_running) { |
144 if (XPending(g_display)) { | 154 if (XPending(g_display)) { |
145 XEvent e; | 155 XEvent e; |
146 XNextEvent(g_display, &e); | 156 XNextEvent(g_display, &e); |
147 if (e.type == Expose) { | 157 if (e.type == Expose) { |
148 // Tell the renderer to paint. | 158 // Tell the renderer to paint. |
149 DCHECK(X11VideoRenderer::instance()); | 159 DCHECK(Renderer::instance()); |
150 X11VideoRenderer::instance()->Paint(); | 160 Renderer::instance()->Paint(); |
151 } else if (e.type == ButtonPress) { | 161 } else if (e.type == ButtonPress) { |
152 // Stop the playback. | 162 // Stop the playback. |
153 break; | 163 break; |
154 } | 164 } |
155 } else { | 165 } else { |
156 // If there's no event in the queue, make an expose event. | 166 // If there's no event in the queue, make an expose event. |
157 XEvent event; | 167 XEvent event; |
158 event.type = Expose; | 168 event.type = Expose; |
159 XSendEvent(g_display, g_window, true, ExposureMask, &event); | 169 XSendEvent(g_display, g_window, true, ExposureMask, &event); |
160 | 170 |
161 // TODO(hclam): It is rather arbitrary to sleep for 10ms and wait | 171 // TODO(hclam): It is rather arbitrary to sleep for 10ms and wait |
162 // for the next event. We should submit an expose event when | 172 // for the next event. We should submit an expose event when |
163 // a frame is available but not firing an expose event every 10ms. | 173 // a frame is available but not firing an expose event every 10ms. |
164 usleep(10000); | 174 usleep(10000); |
165 } | 175 } |
166 } | 176 } |
167 pipeline->Stop(NULL); | 177 pipeline->Stop(NULL); |
168 } else{ | 178 } else{ |
169 std::cout << "Pipeline initialization failed..." << std::endl; | 179 std::cout << "Pipeline initialization failed..." << std::endl; |
170 } | 180 } |
171 | 181 |
172 // Cleanup tasks. | 182 // Cleanup tasks. |
173 thread->Stop(); | 183 thread->Stop(); |
174 XDestroyWindow(g_display, g_window); | 184 XDestroyWindow(g_display, g_window); |
175 XCloseDisplay(g_display); | 185 XCloseDisplay(g_display); |
176 return 0; | 186 return 0; |
177 } | 187 } |
OLD | NEW |