rendering_helper.h revision a3f7b4e666c476898878fa745f637129375cd889
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_COMMON_GPU_MEDIA_RENDERING_HELPER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_COMMON_GPU_MEDIA_RENDERING_HELPER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/size.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WaitableEvent; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19a3f7b4e666c476898878fa745f637129375cd889Ben Murdochstruct RenderingHelperParams { 20a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch RenderingHelperParams(); 21a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ~RenderingHelperParams(); 22a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 23a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch bool suppress_swap_to_display; 24a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch int num_windows; 25a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // Dimensions of window(s) created for displaying frames. In the 26a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // case of thumbnail rendering, these won't match the frame dimensions. 27a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch std::vector<gfx::Size> window_dimensions; 28a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // Dimensions of video frame texture(s). 29a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch std::vector<gfx::Size> frame_dimensions; 30a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // Whether the frames are rendered as scaled thumbnails within a 31a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // larger FBO that is in turn rendered to the window. 32a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch bool render_as_thumbnails; 33a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // The size of the FBO containing all visible thumbnails. 34a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch gfx::Size thumbnails_page_size; 35a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // The size of each thumbnail within the FBO. 36a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch gfx::Size thumbnail_size; 37a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch}; 38a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Creates and draws textures used by the video decoder. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class is not thread safe and thus all the methods of this class 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (except for ctor/dtor) ensure they're being run on a single thread. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderingHelper { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 44a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // Create a platform specific implementation of this object. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static RenderingHelper* Create(); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderingHelper() {} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~RenderingHelper() {} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Create the render context and windows by the specified dimensions. 51a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch virtual void Initialize(const RenderingHelperParams& params, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::WaitableEvent* done) = 0; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Undo the effects of Initialize() and signal |*done|. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void UnInitialize(base::WaitableEvent* done) = 0; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return a newly-created GLES2 texture id rendering to a specific window, and 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // signal |*done|. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CreateTexture(int window_id, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 texture_target, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32* texture_id, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::WaitableEvent* done) = 0; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Render |texture_id| to the screen. 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RenderTexture(uint32 texture_id) = 0; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Delete |texture_id|. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DeleteTexture(uint32 texture_id) = 0; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the platform specific handle to the OpenGL context. 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void* GetGLContext() = 0; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the platform specific handle to the OpenGL display. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void* GetGLDisplay() = 0; 75a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 76a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // Get rendered thumbnails as RGB. 77a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // Sets alpha_solid to true if the alpha channel is entirely 0xff. 78a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch virtual void GetThumbnailsAsRGB(std::vector<unsigned char>* rgb, 79a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch bool* alpha_solid, 80a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::WaitableEvent* done) = 0; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_COMMON_GPU_MEDIA_RENDERING_HELPER_H_ 86