blob: 6a4818f10fc9f326e4d53233d2871c0fb7d87e04 [file] [log] [blame]
Lloyd Piquecc01a452018-12-04 17:24:00 -08001/*
2 * Copyright 2019 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18
19#include <memory>
Lloyd Pique37c2c9b2018-12-04 17:25:10 -080020#include <string>
Lloyd Piquecc01a452018-12-04 17:24:00 -080021
22#include <compositionengine/OutputLayer.h>
Lloyd Pique37c2c9b2018-12-04 17:25:10 -080023#include <compositionengine/impl/OutputLayerCompositionState.h>
Lloyd Piquea83776c2019-01-29 18:42:32 -080024#include <ui/FloatRect.h>
25#include <ui/Rect.h>
Lloyd Piquecc01a452018-12-04 17:24:00 -080026
Lloyd Pique07e33212018-12-18 16:33:37 -080027#include "DisplayHardware/DisplayIdentification.h"
28
Lloyd Piquecc01a452018-12-04 17:24:00 -080029namespace android::compositionengine::impl {
30
31class OutputLayer : public compositionengine::OutputLayer {
32public:
33 OutputLayer(const compositionengine::Output&, std::shared_ptr<compositionengine::Layer>,
34 sp<compositionengine::LayerFE>);
35 ~OutputLayer() override;
36
Lloyd Pique07e33212018-12-18 16:33:37 -080037 void initialize(const CompositionEngine&, std::optional<DisplayId>);
38
Lloyd Piquecc01a452018-12-04 17:24:00 -080039 const compositionengine::Output& getOutput() const override;
40 compositionengine::Layer& getLayer() const override;
41 compositionengine::LayerFE& getLayerFE() const override;
42
Lloyd Pique37c2c9b2018-12-04 17:25:10 -080043 const OutputLayerCompositionState& getState() const override;
44 OutputLayerCompositionState& editState() override;
45
Lloyd Piquea83776c2019-01-29 18:42:32 -080046 void updateCompositionState(bool) override;
47 void writeStateToHWC(bool) const override;
48
Lloyd Pique37c2c9b2018-12-04 17:25:10 -080049 void dump(std::string& result) const override;
50
Lloyd Piquea83776c2019-01-29 18:42:32 -080051 virtual FloatRect calculateOutputSourceCrop() const;
52 virtual Rect calculateOutputDisplayFrame() const;
53 virtual uint32_t calculateOutputRelativeBufferTransform() const;
54
Lloyd Piquecc01a452018-12-04 17:24:00 -080055private:
Lloyd Piquea83776c2019-01-29 18:42:32 -080056 Rect calculateInitialCrop() const;
57
Lloyd Piquecc01a452018-12-04 17:24:00 -080058 const compositionengine::Output& mOutput;
59 std::shared_ptr<compositionengine::Layer> mLayer;
60 sp<compositionengine::LayerFE> mLayerFE;
Lloyd Pique37c2c9b2018-12-04 17:25:10 -080061
62 OutputLayerCompositionState mState;
Lloyd Piquecc01a452018-12-04 17:24:00 -080063};
64
65std::unique_ptr<compositionengine::OutputLayer> createOutputLayer(
Lloyd Pique07e33212018-12-18 16:33:37 -080066 const CompositionEngine&, std::optional<DisplayId>, const compositionengine::Output&,
67 std::shared_ptr<compositionengine::Layer>, sp<compositionengine::LayerFE>);
Lloyd Piquecc01a452018-12-04 17:24:00 -080068
69} // namespace android::compositionengine::impl