Index: content/common/gpu/media/rendering_helper.h |
diff --git a/content/common/gpu/media/rendering_helper.h b/content/common/gpu/media/rendering_helper.h |
index 36b4924adb13ab2dfe8a1dc453cd56ebf959268b..11b380f254fdf52442d34ceb3cb356e2ea4be681 100644 |
--- a/content/common/gpu/media/rendering_helper.h |
+++ b/content/common/gpu/media/rendering_helper.h |
@@ -9,7 +9,10 @@ |
#include <vector> |
#include "base/basictypes.h" |
-#include "ui/gfx/size.h" |
+#include "base/time/time.h" |
+#include "base/timer/timer.h" |
+#include "ui/gfx/geometry/rect.h" |
+#include "ui/gfx/geometry/size.h" |
#include "ui/gl/gl_bindings.h" |
namespace base { |
@@ -27,31 +30,23 @@ typedef EGLContext NativeContextType; |
namespace content { |
-struct RenderingHelperParams { |
- RenderingHelperParams(); |
- ~RenderingHelperParams(); |
- |
- bool suppress_swap_to_display; |
- int num_windows; |
- // Dimensions of window(s) created for displaying frames. In the |
- // case of thumbnail rendering, these won't match the frame dimensions. |
- std::vector<gfx::Size> window_dimensions; |
- // Dimensions of video frame texture(s). |
- std::vector<gfx::Size> frame_dimensions; |
- // Whether the frames are rendered as scaled thumbnails within a |
- // larger FBO that is in turn rendered to the window. |
- bool render_as_thumbnails; |
- // The size of the FBO containing all visible thumbnails. |
- gfx::Size thumbnails_page_size; |
- // The size of each thumbnail within the FBO. |
- gfx::Size thumbnail_size; |
-}; |
+struct RenderingHelperParams; |
// Creates and draws textures used by the video decoder. |
// This class is not thread safe and thus all the methods of this class |
// (except for ctor/dtor) ensure they're being run on a single thread. |
class RenderingHelper { |
public: |
+ // Interface for the content provider of the RenderingHelper. |
+ class Client { |
+ public: |
+ // Callback to tell client to render the content. |
+ virtual void RenderContent(RenderingHelper* helper) = 0; |
+ |
+ protected: |
+ virtual ~Client() {} |
+ }; |
+ |
RenderingHelper(); |
~RenderingHelper(); |
@@ -69,7 +64,12 @@ class RenderingHelper { |
uint32* texture_id, |
base::WaitableEvent* done); |
- // Render |texture_id| to the screen using target |texture_target|. |
+ // Render thumbnail in the |texture_id| to the FBO buffer using target |
+ // |texture_target|. |
+ void RenderThumbnail(uint32 texture_target, uint32 texture_id); |
+ |
+ // Render |texture_id| to the current view port of the screen using target |
+ // |texture_target|. |
void RenderTexture(uint32 texture_target, uint32 texture_id); |
// Delete |texture_id|. |
@@ -90,12 +90,9 @@ class RenderingHelper { |
private: |
void Clear(); |
- // Make window_id's surface current w/ the GL context, or release the context |
- // if |window_id < 0|. |
- void MakeCurrent(int window_id); |
- |
+ void RenderContent(); |
+ base::RepeatingTimer<RenderingHelper> render_timer_; |
base::MessageLoop* message_loop_; |
- std::vector<gfx::Size> window_dimensions_; |
std::vector<gfx::Size> frame_dimensions_; |
NativeContextType gl_context_; |
@@ -103,18 +100,23 @@ class RenderingHelper { |
#if defined(GL_VARIANT_EGL) |
EGLDisplay gl_display_; |
- std::vector<EGLSurface> gl_surfaces_; |
+ EGLSurface gl_surface_; |
#else |
XVisualInfo* x_visual_; |
#endif |
#if defined(OS_WIN) |
- std::vector<HWND> windows_; |
+ HWND window_; |
#else |
Display* x_display_; |
- std::vector<Window> x_windows_; |
+ Window x_window_; |
#endif |
+ // The rendering area of each window on the screen. |
+ std::vector<gfx::Rect> render_areas_; |
+ |
+ std::vector<base::WeakPtr<Client> > clients_; |
+ |
bool render_as_thumbnails_; |
int frame_count_; |
GLuint thumbnails_fbo_id_; |
@@ -122,10 +124,32 @@ class RenderingHelper { |
gfx::Size thumbnails_fbo_size_; |
gfx::Size thumbnail_size_; |
GLuint program_; |
+ base::TimeDelta frame_duration_; |
DISALLOW_COPY_AND_ASSIGN(RenderingHelper); |
}; |
+struct RenderingHelperParams { |
+ RenderingHelperParams(); |
+ ~RenderingHelperParams(); |
+ int rendering_fps; |
+ |
+ std::vector<base::WeakPtr<RenderingHelper::Client> > clients; |
+ int num_windows; |
+ |
+ // Dimensions of window(s) created for displaying frames. In the |
+ // case of thumbnail rendering, these won't match the frame dimensions. |
+ std::vector<gfx::Size> window_dimensions; |
+ // Dimensions of video frame texture(s). |
+ std::vector<gfx::Size> frame_dimensions; |
+ // Whether the frames are rendered as scaled thumbnails within a |
+ // larger FBO that is in turn rendered to the window. |
+ bool render_as_thumbnails; |
+ // The size of the FBO containing all visible thumbnails. |
+ gfx::Size thumbnails_page_size; |
+ // The size of each thumbnail within the FBO. |
+ gfx::Size thumbnail_size; |
+}; |
} // namespace content |
#endif // CONTENT_COMMON_GPU_MEDIA_RENDERING_HELPER_H_ |