1 /*
2  * Copyright 2017 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 #ifndef ANDROID_HARDWARE_GRAPHICS_COMPOSER_V2_1_COMPOSER_BASE_H
18 #define ANDROID_HARDWARE_GRAPHICS_COMPOSER_V2_1_COMPOSER_BASE_H
19 
20 #include <android/hardware/graphics/composer/2.1/IComposer.h>
21 #include <hardware/hwcomposer2.h>
22 
23 namespace android {
24 namespace hardware {
25 namespace graphics {
26 namespace composer {
27 namespace V2_1 {
28 namespace implementation {
29 
30 using android::hardware::graphics::common::V1_0::PixelFormat;
31 using android::hardware::graphics::common::V1_0::Transform;
32 using android::hardware::graphics::common::V1_0::Dataspace;
33 using android::hardware::graphics::common::V1_0::ColorMode;
34 using android::hardware::graphics::common::V1_0::ColorTransform;
35 using android::hardware::graphics::common::V1_0::Hdr;
36 
37 class ComposerBase {
38 public:
~ComposerBase()39     virtual ~ComposerBase() {};
40 
41     virtual void removeClient() = 0;
42     virtual void enableCallback(bool enable) = 0;
43     virtual uint32_t getMaxVirtualDisplayCount() = 0;
44     virtual Error createVirtualDisplay(uint32_t width, uint32_t height,
45         PixelFormat* format, Display* outDisplay) = 0;
46     virtual Error destroyVirtualDisplay(Display display) = 0;
47     virtual Error createLayer(Display display, Layer* outLayer) = 0;
48     virtual Error destroyLayer(Display display, Layer layer) = 0;
49 
50     virtual Error getActiveConfig(Display display, Config* outConfig) = 0;
51     virtual Error getClientTargetSupport(Display display,
52             uint32_t width, uint32_t height,
53             PixelFormat format, Dataspace dataspace) = 0;
54     virtual Error getColorModes(Display display,
55             hidl_vec<ColorMode>* outModes) = 0;
56     virtual Error getDisplayAttribute(Display display, Config config,
57             IComposerClient::Attribute attribute, int32_t* outValue) = 0;
58     virtual Error getDisplayConfigs(Display display,
59             hidl_vec<Config>* outConfigs) = 0;
60     virtual Error getDisplayName(Display display, hidl_string* outName) = 0;
61     virtual Error getDisplayType(Display display,
62             IComposerClient::DisplayType* outType) = 0;
63     virtual Error getDozeSupport(Display display, bool* outSupport) = 0;
64     virtual Error getHdrCapabilities(Display display, hidl_vec<Hdr>* outTypes,
65             float* outMaxLuminance, float* outMaxAverageLuminance,
66             float* outMinLuminance) = 0;
67 
68     virtual Error setActiveConfig(Display display, Config config) = 0;
69     virtual Error setColorMode(Display display, ColorMode mode) = 0;
70     virtual Error setPowerMode(Display display,
71             IComposerClient::PowerMode mode) = 0;
72     virtual Error setVsyncEnabled(Display display,
73             IComposerClient::Vsync enabled) = 0;
74 
75     virtual Error setColorTransform(Display display, const float* matrix,
76             int32_t hint) = 0;
77     virtual Error setClientTarget(Display display, buffer_handle_t target,
78             int32_t acquireFence, int32_t dataspace,
79             const std::vector<hwc_rect_t>& damage) = 0;
80     virtual Error setOutputBuffer(Display display, buffer_handle_t buffer,
81             int32_t releaseFence) = 0;
82     virtual Error validateDisplay(Display display,
83             std::vector<Layer>* outChangedLayers,
84             std::vector<IComposerClient::Composition>* outCompositionTypes,
85             uint32_t* outDisplayRequestMask,
86             std::vector<Layer>* outRequestedLayers,
87             std::vector<uint32_t>* outRequestMasks) = 0;
88     virtual Error acceptDisplayChanges(Display display) = 0;
89     virtual Error presentDisplay(Display display, int32_t* outPresentFence,
90             std::vector<Layer>* outLayers,
91             std::vector<int32_t>* outReleaseFences) = 0;
92 
93     virtual Error setLayerCursorPosition(Display display, Layer layer,
94             int32_t x, int32_t y) = 0;
95     virtual Error setLayerBuffer(Display display, Layer layer,
96             buffer_handle_t buffer, int32_t acquireFence) = 0;
97     virtual Error setLayerSurfaceDamage(Display display, Layer layer,
98             const std::vector<hwc_rect_t>& damage) = 0;
99     virtual Error setLayerBlendMode(Display display, Layer layer,
100             int32_t mode) = 0;
101     virtual Error setLayerColor(Display display, Layer layer,
102             IComposerClient::Color color) = 0;
103     virtual Error setLayerCompositionType(Display display, Layer layer,
104             int32_t type) = 0;
105     virtual Error setLayerDataspace(Display display, Layer layer,
106             int32_t dataspace) = 0;
107     virtual Error setLayerDisplayFrame(Display display, Layer layer,
108             const hwc_rect_t& frame) = 0;
109     virtual Error setLayerPlaneAlpha(Display display, Layer layer,
110             float alpha) = 0;
111     virtual Error setLayerSidebandStream(Display display, Layer layer,
112             buffer_handle_t stream) = 0;
113     virtual Error setLayerSourceCrop(Display display, Layer layer,
114             const hwc_frect_t& crop) = 0;
115     virtual Error setLayerTransform(Display display, Layer layer,
116             int32_t transform) = 0;
117     virtual Error setLayerVisibleRegion(Display display, Layer layer,
118             const std::vector<hwc_rect_t>& visible) = 0;
119     virtual Error setLayerZOrder(Display display, Layer layer,
120             uint32_t z) = 0;
121 };
122 
123 }  // namespace implementation
124 }  // namespace V2_1
125 }  // namespace composer
126 }  // namespace graphics
127 }  // namespace hardware
128 }  // namespace android
129 
130 #endif  // ANDROID_HARDWARE_GRAPHICS_COMPOSER_V2_1_COMPOSER_BASE_H
131