Index: media/tools/player_x11/gles_video_renderer.h |
diff --git a/media/tools/player_x11/gles_video_renderer.h b/media/tools/player_x11/gles_video_renderer.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5061412691e38fd1b5c1d3042281afd6ab073c1c |
--- /dev/null |
+++ b/media/tools/player_x11/gles_video_renderer.h |
@@ -0,0 +1,75 @@ |
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. Use of this |
+// source code is governed by a BSD-style license that can be found in the |
+// LICENSE file. |
+ |
+#ifndef MEDIA_TOOLS_PLAYER_X11_GL_VIDEO_RENDERER_H_ |
+#define MEDIA_TOOLS_PLAYER_X11_GL_VIDEO_RENDERER_H_ |
+ |
+#include <EGL/egl.h> |
+#include <GLES2/gl2.h> |
+#include <GLES2/gl2ext.h> |
+ |
+#include "base/lock.h" |
+#include "base/scoped_ptr.h" |
+#include "media/base/factory.h" |
+#include "media/filters/video_renderer_base.h" |
+ |
+class GlesVideoRenderer : public media::VideoRendererBase { |
+ public: |
+ static media::FilterFactory* CreateFactory(Display* display, |
+ Window window) { |
+ return new media::FilterFactoryImpl2< |
+ GlesVideoRenderer, Display*, Window>(display, window); |
+ } |
+ |
+ GlesVideoRenderer(Display* display, Window window); |
+ |
+ // This method is called to paint the current video frame to the assigned |
+ // window. |
+ virtual void Paint(); |
scherkus (not reviewing)
2010/02/12 01:04:20
this doesn't need to be virtual
|
+ |
+ // media::FilterFactoryImpl2 Implementation. |
+ static bool IsMediaFormatSupported(const media::MediaFormat& media_format); |
+ |
+ static GlesVideoRenderer* instance() { return instance_; } |
+ |
+ protected: |
+ // VideoRendererBase implementation. |
+ virtual bool OnInitialize(media::VideoDecoder* decoder); |
+ virtual void OnStop(); |
+ virtual void OnFrameAvailable(); |
+ |
+ private: |
+ // Only allow to be deleted by reference counting. |
+ friend class scoped_refptr<GlesVideoRenderer>; |
+ virtual ~GlesVideoRenderer(); |
+ |
+ int width_; |
+ int height_; |
+ |
+ Display* display_; |
+ Window window_; |
+ |
+ // Protects |new_frame_|. |
+ Lock lock_; |
+ bool new_frame_; |
+ |
+ // EGL context. |
+ EGLDisplay egl_display_; |
+ EGLSurface egl_surface_; |
+ EGLContext egl_context_; |
+ |
+ // 3 textures, one for each plane. |
+ GLuint textures_[3]; |
+ |
+ // Shaders and program for YUV->RGB conversion. |
+ GLuint vertex_shader_; |
+ GLuint fragment_shader_; |
+ GLuint program_; |
+ |
+ static GlesVideoRenderer* instance_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(GlesVideoRenderer); |
+}; |
+ |
+#endif // MEDIA_TOOLS_PLAYER_X11_GLES_VIDEO_RENDERER_H_ |