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
3 // found in the LICENSE file.
5 #include "ui/ozone/platform/cast/overlay_manager_cast.h"
7 #include "chromecast/public/cast_media_shlib.h"
8 #include "chromecast/public/graphics_types.h"
9 #include "chromecast/public/video_plane.h"
10 #include "ui/gfx/geometry/rect_conversions.h"
11 #include "ui/ozone/public/overlay_candidates_ozone.h"
16 // Translates a gfx::OverlayTransform into a VideoPlane::Transform.
17 // Could be just a lookup table once we have unit tests for this code
18 // to ensure it stays in sync with OverlayTransform.
19 chromecast::media::VideoPlane::Transform
ConvertTransform(
20 gfx::OverlayTransform transform
) {
22 case gfx::OVERLAY_TRANSFORM_NONE
:
23 return chromecast::media::VideoPlane::TRANSFORM_NONE
;
24 case gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL
:
25 return chromecast::media::VideoPlane::FLIP_HORIZONTAL
;
26 case gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL
:
27 return chromecast::media::VideoPlane::FLIP_VERTICAL
;
28 case gfx::OVERLAY_TRANSFORM_ROTATE_90
:
29 return chromecast::media::VideoPlane::ROTATE_90
;
30 case gfx::OVERLAY_TRANSFORM_ROTATE_180
:
31 return chromecast::media::VideoPlane::ROTATE_180
;
32 case gfx::OVERLAY_TRANSFORM_ROTATE_270
:
33 return chromecast::media::VideoPlane::ROTATE_270
;
36 return chromecast::media::VideoPlane::TRANSFORM_NONE
;
40 class OverlayCandidatesCast
: public OverlayCandidatesOzone
{
42 void CheckOverlaySupport(OverlaySurfaceCandidateList
* surfaces
) override
{
43 for (auto& candidate
: *surfaces
) {
44 if (candidate
.plane_z_order
== -1) {
45 candidate
.overlay_handled
= true;
47 // Compositor requires all overlay rectangles to have integer coords
48 candidate
.display_rect
= gfx::ToEnclosedRect(candidate
.display_rect
);
50 chromecast::media::VideoPlane
* video_plane
=
51 chromecast::media::CastMediaShlib::GetVideoPlane();
53 chromecast::RectF
display_rect(
54 candidate
.display_rect
.x(), candidate
.display_rect
.y(),
55 candidate
.display_rect
.width(), candidate
.display_rect
.height());
56 video_plane
->SetGeometry(
58 chromecast::media::VideoPlane::COORDINATE_TYPE_GRAPHICS_PLANE
,
59 ConvertTransform(candidate
.transform
));
68 OverlayManagerCast::OverlayManagerCast() {
71 OverlayManagerCast::~OverlayManagerCast() {
74 scoped_ptr
<OverlayCandidatesOzone
> OverlayManagerCast::CreateOverlayCandidates(
75 gfx::AcceleratedWidget w
) {
76 return make_scoped_ptr(new OverlayCandidatesCast());
79 bool OverlayManagerCast::CanShowPrimaryPlaneAsOverlay() {