Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(47)

Side by Side Diff: media/tools/player_x11/player_x11.cc

Issue 596055: Implement GLES video renderer in player_x11 (Closed)
Patch Set: nits fixed Created 10 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698