| // Copyright 2017 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_VIZ_SERVICE_DISPLAY_OVERLAY_STRATEGY_UNDERLAY_CAST_H_ |
| #define COMPONENTS_VIZ_SERVICE_DISPLAY_OVERLAY_STRATEGY_UNDERLAY_CAST_H_ |
| |
| #include <memory> |
| #include <vector> |
| |
| #include "components/viz/service/display/overlay_strategy_underlay.h" |
| #include "components/viz/service/viz_service_export.h" |
| |
| #include "chromecast/media/service/mojom/video_geometry_setter.mojom.h" |
| #include "mojo/public/cpp/bindings/pending_remote.h" |
| |
| namespace viz { |
| // Similar to underlay strategy plus Cast-specific handling of content bounds. |
| class VIZ_SERVICE_EXPORT OverlayStrategyUnderlayCast |
| : public OverlayStrategyUnderlay { |
| public: |
| explicit OverlayStrategyUnderlayCast( |
| OverlayProcessorUsingStrategy* capability_checker); |
| |
| OverlayStrategyUnderlayCast(const OverlayStrategyUnderlayCast&) = delete; |
| OverlayStrategyUnderlayCast& operator=(const OverlayStrategyUnderlayCast&) = |
| delete; |
| |
| ~OverlayStrategyUnderlayCast() override; |
| |
| void Propose( |
| const SkM44& output_color_matrix, |
| const OverlayProcessorInterface::FilterOperationsMap& render_pass_filters, |
| const OverlayProcessorInterface::FilterOperationsMap& |
| render_pass_backdrop_filters, |
| const DisplayResourceProvider* resource_provider, |
| AggregatedRenderPassList* render_pass_list, |
| SurfaceDamageRectList* surface_damage_rect_list, |
| const std::optional<OverlayCandidate>& primary_plane, |
| std::vector<OverlayProposedCandidate>* candidates, |
| std::vector<gfx::Rect>* content_bounds) override; |
| |
| bool Attempt( |
| const SkM44& output_color_matrix, |
| const OverlayProcessorInterface::FilterOperationsMap& render_pass_filters, |
| const OverlayProcessorInterface::FilterOperationsMap& |
| render_pass_backdrop_filters, |
| const DisplayResourceProvider* resource_provider, |
| AggregatedRenderPassList* render_pass_list, |
| SurfaceDamageRectList* surface_damage_rect_list, |
| const std::optional<OverlayCandidate>& primary_plane, |
| OverlayCandidateList* candidates, |
| std::vector<gfx::Rect>* content_bounds, |
| const OverlayProposedCandidate& proposed_candidate) override; |
| |
| void CommitCandidate(const OverlayProposedCandidate& proposed_candidate, |
| AggregatedRenderPass* render_pass) override; |
| |
| // In Chromecast build, OverlayStrategyUnderlayCast needs a valid mojo |
| // interface to VideoGeometrySetter Service (shared by all instances of |
| // OverlaystrategyUnderlayCast). This must be called before compositor starts. |
| // Ideally, it can be called after compositor thread is created. |
| // Must be called on compositor thread. |
| static void ConnectVideoGeometrySetter( |
| mojo::PendingRemote<chromecast::media::mojom::VideoGeometrySetter> |
| video_geometry_setter); |
| |
| OverlayStrategy GetUMAEnum() const override; |
| |
| private: |
| // Keep track if an overlay is being used on the previous frame. |
| bool is_using_overlay_ = false; |
| }; |
| |
| } // namespace viz |
| |
| #endif // COMPONENTS_VIZ_SERVICE_DISPLAY_OVERLAY_STRATEGY_UNDERLAY_CAST_H_ |