| Index: content/browser/renderer_host/compositing_iosurface_transformer_mac.h
|
| diff --git a/content/browser/renderer_host/compositing_iosurface_transformer_mac.h b/content/browser/renderer_host/compositing_iosurface_transformer_mac.h
|
| index d401b92d12f96e1e0c92c001b08cd2b078af25f6..48900741944157c88996db823c9c66345eb9ac38 100644
|
| --- a/content/browser/renderer_host/compositing_iosurface_transformer_mac.h
|
| +++ b/content/browser/renderer_host/compositing_iosurface_transformer_mac.h
|
| @@ -9,10 +9,10 @@
|
|
|
| #include "base/basictypes.h"
|
| #include "content/browser/renderer_host/compositing_iosurface_shader_programs_mac.h"
|
| +#include "ui/gfx/size.h"
|
|
|
| namespace gfx {
|
| class Rect;
|
| -class Size;
|
| } // namespace gfx
|
|
|
| namespace content {
|
| @@ -35,9 +35,15 @@ class CompositingIOSurfaceTransformer {
|
|
|
| ~CompositingIOSurfaceTransformer();
|
|
|
| + // Delete any references to currently-cached OpenGL objects. This must be
|
| + // called within the OpenGL context just before destruction.
|
| + void ReleaseCachedGLObjects();
|
| +
|
| // Resize using bilinear interpolation. Returns false on error. Otherwise,
|
| - // the |texture| argument will point to the result and the caller is
|
| - // responsible for calling glDeleteTexture(*texture).
|
| + // the |texture| argument will point to the result. Ownership of the returned
|
| + // |texture| remains with CompositingIOSurfaceTransformer (i.e., the caller
|
| + // must not delete this texture). The |texture| remains valid until the next
|
| + // call to ResizeBilinear() or ReleaseCachedGLObjects().
|
| //
|
| // If the src and dst sizes are identical, this becomes a simple copy into a
|
| // new texture.
|
| @@ -51,15 +57,20 @@ class CompositingIOSurfaceTransformer {
|
| //
|
| // YV12 is effectively a twelve bit per pixel format consisting of a full-
|
| // size y (luminance) plane and half-width, half-height u and v (blue and
|
| - // red chrominance) planes. This method will allocate three off-screen
|
| - // textures, one for each plane, and return them via the output arguments
|
| - // |texture_y|, |texture_u|, and |texture_v|. While the textures are in
|
| - // GL_RGBA format, they should be interpreted as the appropriate single-byte,
|
| - // planar format after reading the pixel data. The output arguments
|
| - // |packed_y_size| and |packed_uv_size| follow from these special semantics:
|
| - // They represent the size of their corresponding texture, if it was to be
|
| - // treated like RGBA pixel data. That means their widths are in terms of
|
| - // "quads," where one quad contains 4 Y (or U or V) pixels.
|
| + // red chrominance) planes. This method will return three off-screen
|
| + // textures, one for each plane, via the output arguments |texture_y|,
|
| + // |texture_u|, and |texture_v|. While the textures are in GL_RGBA format,
|
| + // they should be interpreted as the appropriate single-byte, planar format
|
| + // after reading the pixel data. The output arguments |packed_y_size| and
|
| + // |packed_uv_size| follow from these special semantics: They represent the
|
| + // size of their corresponding texture, if it was to be treated like RGBA
|
| + // pixel data. That means their widths are in terms of "quads," where one
|
| + // quad contains 4 Y (or U or V) pixels.
|
| + //
|
| + // Ownership of the returned textures remains with
|
| + // CompositingIOSurfaceTransformer (i.e., the caller must not delete the
|
| + // textures). The textures remain valid until the next call to
|
| + // TransformRGBToYV12() or ReleaseCachedGLObjects().
|
| //
|
| // If |src_subrect|'s size does not match |dst_size|, the source will be
|
| // bilinearly interpolated during conversion.
|
| @@ -73,6 +84,22 @@ class CompositingIOSurfaceTransformer {
|
| gfx::Size* packed_y_size, gfx::Size* packed_uv_size);
|
|
|
| private:
|
| + enum CachedTexture {
|
| + RGBA_OUTPUT = 0,
|
| + Y_PLANE_OUTPUT,
|
| + UUVV_INTERMEDIATE,
|
| + U_PLANE_OUTPUT,
|
| + V_PLANE_OUTPUT,
|
| + NUM_CACHED_TEXTURES
|
| + };
|
| +
|
| + // If necessary, generate the texture and/or resize it to the given |size|.
|
| + void PrepareTexture(CachedTexture which, const gfx::Size& size);
|
| +
|
| + // If necessary, generate a framebuffer object to be used as an intermediate
|
| + // destination for drawing.
|
| + void PrepareFramebuffer();
|
| +
|
| // Target to bind all input and output textures to (which defines the type of
|
| // textures being created and read). Generally, this is
|
| // GL_TEXTURE_RECTANGLE_ARB.
|
| @@ -80,6 +107,11 @@ class CompositingIOSurfaceTransformer {
|
| const bool src_texture_needs_y_flip_;
|
| CompositingIOSurfaceShaderPrograms* const shader_program_cache_;
|
|
|
| + // Cached OpenGL objects.
|
| + GLuint textures_[NUM_CACHED_TEXTURES];
|
| + gfx::Size texture_sizes_[NUM_CACHED_TEXTURES];
|
| + GLuint frame_buffer_;
|
| +
|
| // Auto-detected and set once in the constructor.
|
| bool system_supports_multiple_draw_buffers_;
|
|
|
|
|