| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/output/overlay_strategy_common.h" | 5 #include "cc/output/overlay_strategy_common.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "cc/quads/solid_color_draw_quad.h" | 9 #include "cc/quads/solid_color_draw_quad.h" |
| 10 #include "cc/quads/stream_video_draw_quad.h" | 10 #include "cc/quads/stream_video_draw_quad.h" |
| 11 #include "cc/quads/texture_draw_quad.h" | 11 #include "cc/quads/texture_draw_quad.h" |
| 12 #include "ui/gfx/geometry/point3_f.h" | 12 #include "ui/gfx/geometry/point3_f.h" |
| 13 #include "ui/gfx/geometry/rect_conversions.h" | 13 #include "ui/gfx/geometry/rect_conversions.h" |
| 14 #include "ui/gfx/transform.h" | 14 #include "ui/gfx/transform.h" |
| 15 | 15 |
| 16 namespace cc { | 16 namespace cc { |
| 17 | 17 |
| 18 OverlayStrategyCommon::OverlayStrategyCommon( | 18 OverlayStrategyCommon::OverlayStrategyCommon() { |
| 19 OverlayCandidateValidator* capability_checker, | |
| 20 ResourceProvider* resource_provider) | |
| 21 : capability_checker_(capability_checker), | |
| 22 resource_provider_(resource_provider) { | |
| 23 } | 19 } |
| 24 | 20 |
| 25 OverlayStrategyCommon::~OverlayStrategyCommon() { | 21 OverlayStrategyCommon::~OverlayStrategyCommon() { |
| 26 } | 22 } |
| 27 | 23 |
| 28 bool OverlayStrategyCommon::IsOverlayQuad(const DrawQuad* draw_quad) { | 24 bool OverlayStrategyCommon::IsOverlayQuad(const DrawQuad* draw_quad) { |
| 29 unsigned int resource_id; | |
| 30 switch (draw_quad->material) { | 25 switch (draw_quad->material) { |
| 31 case DrawQuad::TEXTURE_CONTENT: | 26 case DrawQuad::TEXTURE_CONTENT: |
| 32 resource_id = TextureDrawQuad::MaterialCast(draw_quad)->resource_id; | 27 return TextureDrawQuad::MaterialCast(draw_quad)->allow_overlay; |
| 33 break; | 28 break; |
| 34 case DrawQuad::STREAM_VIDEO_CONTENT: | 29 case DrawQuad::STREAM_VIDEO_CONTENT: |
| 35 resource_id = StreamVideoDrawQuad::MaterialCast(draw_quad)->resource_id; | 30 return StreamVideoDrawQuad::MaterialCast(draw_quad)->allow_overlay; |
| 36 break; | 31 break; |
| 37 default: | 32 default: |
| 38 return false; | 33 return false; |
| 39 } | 34 } |
| 40 return resource_provider_->AllowOverlay(resource_id); | |
| 41 } | 35 } |
| 42 | 36 |
| 43 bool OverlayStrategyCommon::IsInvisibleQuad(const DrawQuad* draw_quad) { | 37 bool OverlayStrategyCommon::IsInvisibleQuad(const DrawQuad* draw_quad) { |
| 44 if (draw_quad->material == DrawQuad::SOLID_COLOR) { | 38 if (draw_quad->material == DrawQuad::SOLID_COLOR) { |
| 45 const SolidColorDrawQuad* solid_quad = | 39 const SolidColorDrawQuad* solid_quad = |
| 46 SolidColorDrawQuad::MaterialCast(draw_quad); | 40 SolidColorDrawQuad::MaterialCast(draw_quad); |
| 47 SkColor color = solid_quad->color; | 41 SkColor color = solid_quad->color; |
| 48 float opacity = solid_quad->opacity(); | 42 float opacity = solid_quad->opacity(); |
| 49 float alpha = (SkColorGetA(color) * (1.0f / 255.0f)) * opacity; | 43 float alpha = (SkColorGetA(color) * (1.0f / 255.0f)) * opacity; |
| 50 return solid_quad->ShouldDrawWithBlending() && | 44 return solid_quad->ShouldDrawWithBlending() && |
| 51 alpha < std::numeric_limits<float>::epsilon(); | 45 alpha < std::numeric_limits<float>::epsilon(); |
| 52 } | 46 } |
| 53 return false; | 47 return false; |
| 54 } | 48 } |
| 55 | 49 |
| 56 bool OverlayStrategyCommon::GetTextureQuadInfo(const TextureDrawQuad& quad, | 50 bool OverlayStrategyCommon::GetTextureQuadInfo(const TextureDrawQuad& quad, |
| 57 OverlayCandidate* quad_info) { | 51 OverlayCandidate* quad_info) { |
| 58 gfx::OverlayTransform overlay_transform = | 52 gfx::OverlayTransform overlay_transform = |
| 59 OverlayCandidate::GetOverlayTransform(quad.quadTransform(), | 53 OverlayCandidate::GetOverlayTransform(quad.quadTransform(), |
| 60 quad.y_flipped); | 54 quad.y_flipped); |
| 61 if (quad.background_color != SK_ColorTRANSPARENT || | 55 if (quad.background_color != SK_ColorTRANSPARENT || |
| 62 quad.premultiplied_alpha || | 56 quad.premultiplied_alpha || |
| 63 overlay_transform == gfx::OVERLAY_TRANSFORM_INVALID) | 57 overlay_transform == gfx::OVERLAY_TRANSFORM_INVALID) |
| 64 return false; | 58 return false; |
| 65 quad_info->resource_id = quad.resource_id; | 59 quad_info->resource_id = quad.resource_id; |
| 60 quad_info->resource_size = quad.resource_size; |
| 66 quad_info->transform = overlay_transform; | 61 quad_info->transform = overlay_transform; |
| 67 quad_info->uv_rect = BoundingRect(quad.uv_top_left, quad.uv_bottom_right); | 62 quad_info->uv_rect = BoundingRect(quad.uv_top_left, quad.uv_bottom_right); |
| 68 return true; | 63 return true; |
| 69 } | 64 } |
| 70 | 65 |
| 71 bool OverlayStrategyCommon::GetVideoQuadInfo(const StreamVideoDrawQuad& quad, | 66 bool OverlayStrategyCommon::GetVideoQuadInfo(const StreamVideoDrawQuad& quad, |
| 72 OverlayCandidate* quad_info) { | 67 OverlayCandidate* quad_info) { |
| 73 gfx::OverlayTransform overlay_transform = | 68 gfx::OverlayTransform overlay_transform = |
| 74 OverlayCandidate::GetOverlayTransform(quad.quadTransform(), false); | 69 OverlayCandidate::GetOverlayTransform(quad.quadTransform(), false); |
| 75 if (overlay_transform == gfx::OVERLAY_TRANSFORM_INVALID) | 70 if (overlay_transform == gfx::OVERLAY_TRANSFORM_INVALID) |
| 76 return false; | 71 return false; |
| 77 if (!quad.matrix.IsScaleOrTranslation()) { | 72 if (!quad.matrix.IsScaleOrTranslation()) { |
| 78 // We cannot handle anything other than scaling & translation for texture | 73 // We cannot handle anything other than scaling & translation for texture |
| 79 // coordinates yet. | 74 // coordinates yet. |
| 80 return false; | 75 return false; |
| 81 } | 76 } |
| 82 quad_info->resource_id = quad.resource_id; | 77 quad_info->resource_id = quad.resource_id; |
| 78 quad_info->resource_size = quad.resource_size; |
| 83 quad_info->transform = overlay_transform; | 79 quad_info->transform = overlay_transform; |
| 84 | 80 |
| 85 gfx::Point3F uv0 = gfx::Point3F(0, 0, 0); | 81 gfx::Point3F uv0 = gfx::Point3F(0, 0, 0); |
| 86 gfx::Point3F uv1 = gfx::Point3F(1, 1, 0); | 82 gfx::Point3F uv1 = gfx::Point3F(1, 1, 0); |
| 87 quad.matrix.TransformPoint(&uv0); | 83 quad.matrix.TransformPoint(&uv0); |
| 88 quad.matrix.TransformPoint(&uv1); | 84 quad.matrix.TransformPoint(&uv1); |
| 89 gfx::Vector3dF delta = uv1 - uv0; | 85 gfx::Vector3dF delta = uv1 - uv0; |
| 90 if (delta.x() < 0) { | 86 if (delta.x() < 0) { |
| 91 quad_info->transform = OverlayCandidate::ModifyTransform( | 87 quad_info->transform = OverlayCandidate::ModifyTransform( |
| 92 quad_info->transform, gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL); | 88 quad_info->transform, gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 127 return false; | 123 return false; |
| 128 } | 124 } |
| 129 | 125 |
| 130 quad_info->format = RGBA_8888; | 126 quad_info->format = RGBA_8888; |
| 131 quad_info->display_rect = OverlayCandidate::GetOverlayRect( | 127 quad_info->display_rect = OverlayCandidate::GetOverlayRect( |
| 132 draw_quad.quadTransform(), draw_quad.rect); | 128 draw_quad.quadTransform(), draw_quad.rect); |
| 133 return true; | 129 return true; |
| 134 } | 130 } |
| 135 | 131 |
| 136 } // namespace cc | 132 } // namespace cc |
| OLD | NEW |