Index: components/display_compositor/gl_helper_scaling.h |
diff --git a/components/display_compositor/gl_helper_scaling.h b/components/display_compositor/gl_helper_scaling.h |
deleted file mode 100644 |
index a2e5b61665ac05c6f858c9f20c862c502bbb25d4..0000000000000000000000000000000000000000 |
--- a/components/display_compositor/gl_helper_scaling.h |
+++ /dev/null |
@@ -1,208 +0,0 @@ |
-// Copyright (c) 2013 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 COMPONENTS_DISPLAY_COMPOSITOR_GL_HELPER_SCALING_H_ |
-#define COMPONENTS_DISPLAY_COMPOSITOR_GL_HELPER_SCALING_H_ |
- |
-#include <deque> |
-#include <map> |
-#include <vector> |
- |
-#include "base/macros.h" |
-#include "components/display_compositor/display_compositor_export.h" |
-#include "components/display_compositor/gl_helper.h" |
-#include "ui/gfx/geometry/rect.h" |
-#include "ui/gfx/geometry/size.h" |
- |
-namespace display_compositor { |
- |
-class ShaderProgram; |
-class ScalerImpl; |
-class GLHelperTest; |
- |
-// Implements GPU texture scaling methods. |
-// Note that you should probably not use this class directly. |
-// See gl_helper.cc::CreateScaler instead. |
-class DISPLAY_COMPOSITOR_EXPORT GLHelperScaling { |
- public: |
- enum ShaderType { |
- SHADER_BILINEAR, |
- SHADER_BILINEAR2, |
- SHADER_BILINEAR3, |
- SHADER_BILINEAR4, |
- SHADER_BILINEAR2X2, |
- SHADER_BICUBIC_UPSCALE, |
- SHADER_BICUBIC_HALF_1D, |
- SHADER_PLANAR, |
- SHADER_YUV_MRT_PASS1, |
- SHADER_YUV_MRT_PASS2, |
- }; |
- |
- // Similar to ScalerInterface, but can generate multiple outputs. |
- // Used for YUV conversion in gl_helper.c |
- class DISPLAY_COMPOSITOR_EXPORT ShaderInterface { |
- public: |
- ShaderInterface() {} |
- virtual ~ShaderInterface() {} |
- // Note that the src_texture will have the min/mag filter set to GL_LINEAR |
- // and wrap_s/t set to CLAMP_TO_EDGE in this call. |
- virtual void Execute(GLuint source_texture, |
- const std::vector<GLuint>& dest_textures) = 0; |
- }; |
- |
- typedef std::pair<ShaderType, bool> ShaderProgramKeyType; |
- |
- GLHelperScaling(gpu::gles2::GLES2Interface* gl, GLHelper* helper); |
- ~GLHelperScaling(); |
- void InitBuffer(); |
- |
- GLHelper::ScalerInterface* CreateScaler(GLHelper::ScalerQuality quality, |
- gfx::Size src_size, |
- gfx::Rect src_subrect, |
- const gfx::Size& dst_size, |
- bool vertically_flip_texture, |
- bool swizzle); |
- |
- GLHelper::ScalerInterface* CreatePlanarScaler(const gfx::Size& src_size, |
- const gfx::Rect& src_subrect, |
- const gfx::Size& dst_size, |
- bool vertically_flip_texture, |
- bool swizzle, |
- const float color_weights[4]); |
- |
- ShaderInterface* CreateYuvMrtShader(const gfx::Size& src_size, |
- const gfx::Rect& src_subrect, |
- const gfx::Size& dst_size, |
- bool vertically_flip_texture, |
- bool swizzle, |
- ShaderType shader); |
- |
- private: |
- // A ScaleOp represents a pass in a scaler pipeline, in one dimension. |
- // Note that when quality is GOOD, multiple scaler passes will be |
- // combined into one operation for increased performance. |
- // Exposed in the header file for testing purposes. |
- struct ScaleOp { |
- ScaleOp(int factor, bool x, int size) |
- : scale_factor(factor), scale_x(x), scale_size(size) {} |
- |
- // Calculate a set of ScaleOp needed to convert an image of size |
- // |src| into an image of size |dst|. If |scale_x| is true, then |
- // the calculations are for the X axis of the image, otherwise Y. |
- // If |allow3| is true, we can use a SHADER_BILINEAR3 to replace |
- // a scale up and scale down with a 3-tap bilinear scale. |
- // The calculated ScaleOps are added to |ops|. |
- static void AddOps(int src, |
- int dst, |
- bool scale_x, |
- bool allow3, |
- std::deque<ScaleOp>* ops) { |
- int num_downscales = 0; |
- if (allow3 && dst * 3 >= src && dst * 2 < src) { |
- // Technically, this should be a scale up and then a |
- // scale down, but it makes the optimization code more |
- // complicated. |
- ops->push_back(ScaleOp(3, scale_x, dst)); |
- return; |
- } |
- while ((dst << num_downscales) < src) { |
- num_downscales++; |
- } |
- if ((dst << num_downscales) != src) { |
- ops->push_back(ScaleOp(0, scale_x, dst << num_downscales)); |
- } |
- while (num_downscales) { |
- num_downscales--; |
- ops->push_back(ScaleOp(2, scale_x, dst << num_downscales)); |
- } |
- } |
- |
- // Update |size| to its new size. Before calling this function |
- // |size| should be the size of the input image. After calling it, |
- // |size| will be the size of the image after this particular |
- // scaling operation. |
- void UpdateSize(gfx::Size* subrect) { |
- if (scale_x) { |
- subrect->set_width(scale_size); |
- } else { |
- subrect->set_height(scale_size); |
- } |
- } |
- |
- // A scale factor of 0 means upscale |
- // 2 means 50% scale |
- // 3 means 33% scale, etc. |
- int scale_factor; |
- bool scale_x; // Otherwise y |
- int scale_size; // Size to scale to. |
- }; |
- |
- // Full specification for a single scaling stage. |
- struct ScalerStage { |
- ScalerStage(ShaderType shader_, |
- gfx::Size src_size_, |
- gfx::Rect src_subrect_, |
- gfx::Size dst_size_, |
- bool scale_x_, |
- bool vertically_flip_texture_, |
- bool swizzle_); |
- ScalerStage(const ScalerStage& other); |
- ShaderType shader; |
- gfx::Size src_size; |
- gfx::Rect src_subrect; |
- gfx::Size dst_size; |
- bool scale_x; |
- bool vertically_flip_texture; |
- bool swizzle; |
- }; |
- |
- // Compute a vector of scaler stages for a particular |
- // set of input/output parameters. |
- void ComputeScalerStages(GLHelper::ScalerQuality quality, |
- const gfx::Size& src_size, |
- const gfx::Rect& src_subrect, |
- const gfx::Size& dst_size, |
- bool vertically_flip_texture, |
- bool swizzle, |
- std::vector<ScalerStage>* scaler_stages); |
- |
- // Take two queues of ScaleOp structs and generate a |
- // vector of scaler stages. This is the second half of |
- // ComputeScalerStages. |
- void ConvertScalerOpsToScalerStages( |
- GLHelper::ScalerQuality quality, |
- gfx::Size src_size, |
- gfx::Rect src_subrect, |
- const gfx::Size& dst_size, |
- bool vertically_flip_texture, |
- bool swizzle, |
- std::deque<GLHelperScaling::ScaleOp>* x_ops, |
- std::deque<GLHelperScaling::ScaleOp>* y_ops, |
- std::vector<ScalerStage>* scaler_stages); |
- |
- scoped_refptr<ShaderProgram> GetShaderProgram(ShaderType type, bool swizzle); |
- |
- // Interleaved array of 2-dimentional vertex positions (x, y) and |
- // 2-dimentional texture coordinates (s, t). |
- static const GLfloat kVertexAttributes[]; |
- |
- gpu::gles2::GLES2Interface* gl_; |
- GLHelper* helper_; |
- |
- // The buffer that holds the vertices and the texture coordinates data for |
- // drawing a quad. |
- ScopedBuffer vertex_attributes_buffer_; |
- |
- std::map<ShaderProgramKeyType, scoped_refptr<ShaderProgram>> shader_programs_; |
- |
- friend class ShaderProgram; |
- friend class ScalerImpl; |
- friend class GLHelperBenchmark; |
- friend class GLHelperTest; |
- DISALLOW_COPY_AND_ASSIGN(GLHelperScaling); |
-}; |
- |
-} // namespace display_compositor |
- |
-#endif // COMPONENTS_DISPLAY_COMPOSITOR_GL_HELPER_SCALING_H_ |