summaryrefslogtreecommitdiff
path: root/hwc2/MesonHwc2.h (plain)
blob: 94356ab1031b891501344030a7a355154f0ebcb7
1/*
2 * Copyright (c) 2017 Amlogic, Inc. All rights reserved.
3 *
4 * This source code is subject to the terms and conditions defined in the
5 * file 'LICENSE' which is part of this source code package.
6 *
7 * Description:
8 */
9#ifndef MESON_HWC2_H
10#define MESON_HWC2_H
11
12#include <map>
13#include <hardware/hardware.h>
14#include "HwcDisplayPipe.h"
15
16#include "Hwc2Display.h"
17
18class MesonHwc2 : public android::Singleton<MesonHwc2> {
19/*hwc2 interface*/
20public:
21 void getCapabilities(uint32_t* outCount, int32_t* outCapabilities);
22 int32_t getClientTargetSupport( hwc2_display_t display,
23 uint32_t width, uint32_t height, int32_t format, int32_t dataspace);
24
25 int32_t registerCallback(int32_t descriptor,
26 hwc2_callback_data_t callbackData, hwc2_function_pointer_t pointer);
27
28 /*Virtual display functions*/
29 int32_t createVirtualDisplay(uint32_t width, uint32_t height,
30 int32_t* format, hwc2_display_t* outDisplay);
31 int32_t destroyVirtualDisplay(hwc2_display_t display);
32 uint32_t getMaxVirtualDisplayCount();
33
34 /*display functions*/
35 int32_t acceptDisplayChanges(hwc2_display_t display);
36 int32_t getActiveConfig(hwc2_display_t display, hwc2_config_t* outConfig);
37 int32_t getDisplayConfigs(hwc2_display_t display,
38 uint32_t* outNumConfigs, hwc2_config_t* outConfigs);
39
40 int32_t getColorModes(hwc2_display_t display, uint32_t* outNumModes,
41 int32_t* outModes);
42 int32_t getDisplayAttribute( hwc2_display_t display, hwc2_config_t config,
43 int32_t attribute, int32_t* outValue);
44 int32_t getDisplayName(hwc2_display_t display, uint32_t* outSize, char* outName);
45 int32_t getDisplayRequests(hwc2_display_t display,
46 int32_t* outDisplayRequests, uint32_t* outNumElements,
47 hwc2_layer_t* outLayers, int32_t* outLayerRequests);
48 int32_t getDisplayType(hwc2_display_t display, int32_t* outType);
49 int32_t getDozeSupport(hwc2_display_t display, int32_t* outSupport);
50 int32_t getHdrCapabilities(hwc2_display_t display, uint32_t* outNumTypes,
51 int32_t* outTypes, float* outMaxLuminance,
52 float* outMaxAverageLuminance, float* outMinLuminance);
53 int32_t presentDisplay(hwc2_display_t display, int32_t* outPresentFence);
54 int32_t setActiveConfig(hwc2_display_t display, hwc2_config_t config);
55 int32_t setClientTarget(hwc2_display_t display, buffer_handle_t target,
56 int32_t acquireFence, int32_t dataspace, hwc_region_t damage);
57 int32_t setColorMode(hwc2_display_t display, int32_t mode);
58 int32_t setColorTransform(hwc2_display_t display, const float* matrix,
59 int32_t hint);
60 int32_t setOutputBuffer(hwc2_display_t display, buffer_handle_t buffer,
61 int32_t releaseFence);
62 int32_t setPowerMode(hwc2_display_t display, int32_t mode);
63 int32_t setVsyncEnable(hwc2_display_t display, int32_t enabled);
64 int32_t getReleaseFences(hwc2_display_t display, uint32_t* outNumElements,
65 hwc2_layer_t* outLayers, int32_t* outFences);
66 int32_t validateDisplay(hwc2_display_t display, uint32_t* outNumTypes,
67 uint32_t* outNumRequests);
68 int32_t getChangedCompositionTypes(hwc2_display_t display,
69 uint32_t* outNumElements, hwc2_layer_t* outLayers, int32_t* outTypes);
70 int32_t setCalibrateInfo(hwc2_display_t display);
71
72 /*layer functions*/
73 int32_t createLayer(hwc2_display_t display, hwc2_layer_t* outLayer);
74 int32_t destroyLayer(hwc2_display_t display, hwc2_layer_t layer);
75 int32_t setCursorPosition(hwc2_display_t display, hwc2_layer_t layer,
76 int32_t x, int32_t y);
77 int32_t setLayerBuffer(hwc2_display_t display, hwc2_layer_t layer,
78 buffer_handle_t buffer, int32_t acquireFence);
79 int32_t setLayerSurfaceDamage(hwc2_display_t display, hwc2_layer_t layer,
80 hwc_region_t damage);
81 int32_t setLayerBlendMode(hwc2_display_t display, hwc2_layer_t layer,
82 int32_t mode);
83 int32_t setLayerColor(hwc2_display_t display, hwc2_layer_t layer,
84 hwc_color_t color);
85 int32_t setLayerCompositionType(hwc2_display_t display, hwc2_layer_t layer,
86 int32_t type);
87 int32_t setLayerDataspace(hwc2_display_t display, hwc2_layer_t layer,
88 int32_t dataspace);
89 int32_t setLayerDisplayFrame(hwc2_display_t display, hwc2_layer_t layer,
90 hwc_rect_t frame);
91 int32_t setLayerPlaneAlpha(hwc2_display_t display, hwc2_layer_t layer,
92 float alpha);
93 int32_t setLayerSidebandStream(hwc2_display_t display, hwc2_layer_t layer,
94 const native_handle_t* stream);
95 int32_t setLayerSourceCrop(hwc2_display_t display, hwc2_layer_t layer,
96 hwc_frect_t crop);
97 int32_t setLayerTransform(hwc2_display_t display, hwc2_layer_t layer,
98 int32_t transform);
99 int32_t setLayerVisibleRegion(hwc2_display_t display, hwc2_layer_t layer,
100 hwc_region_t visible);
101 int32_t setLayerZorder(hwc2_display_t display, hwc2_layer_t layer,
102 uint32_t z);
103
104#ifdef HWC_HDR_METADATA_SUPPORT
105 int32_t setLayerPerFrameMetadata(
106 hwc2_display_t display, hwc2_layer_t layer,
107 uint32_t numElements, const int32_t* /*hw2_per_frame_metadata_key_t*/ keys,
108 const float* metadata);
109 int32_t getPerFrameMetadataKeys(
110 hwc2_display_t display,
111 uint32_t* outNumKeys,
112 int32_t* /*hwc2_per_frame_metadata_key_t*/ outKeys);
113#endif
114
115 int32_t getRenderIntents(hwc2_display_t display,
116 int32_t mode, uint32_t* outNumIntents, int32_t* outIntents);
117 int32_t setColorModeWithRenderIntent (hwc2_display_t display,
118 int32_t mode, int32_t intent);
119
120
121 int32_t getDisplayIdentificationData(hwc2_display_t display, uint8_t* outPort,
122 uint32_t* outDataSize, uint8_t* outData);
123 int32_t getDisplayCapabilities(hwc2_display_t display, uint32_t* outNumCapabilities, uint32_t* outCapabilities);
124 int32_t getDisplayBrightnessSupport(hwc2_display_t display, bool* outSupport);
125 int32_t setDisplayBrightness(hwc2_display_t display, float brightness);
126
127 void dump(uint32_t* outSize, char* outBuffer);
128
129/*amlogic ext display interface*/
130public:
131 int32_t setPostProcessor(bool bEnable);
132
133 uint32_t getDisplayRequest();
134 int32_t handleDisplayRequest(uint32_t request);
135
136/*implement*/
137public:
138 void refresh(hwc2_display_t display);
139 void onVsync(hwc2_display_t display, int64_t timestamp);
140 void onHotplug(hwc2_display_t display, bool connected);
141
142public:
143 MesonHwc2();
144 virtual ~MesonHwc2();
145
146/* for meson display service */
147public:
148 int32_t captureDisplayScreen(buffer_handle_t hnd);
149
150protected:
151 int32_t initialize();
152 bool isDisplayValid(hwc2_display_t display);
153
154 uint32_t getVirtualDisplayId();
155 void freeVirtualDisplayId(uint32_t id);
156
157protected:
158 std::map<hwc2_display_t, std::shared_ptr<Hwc2Display>> mDisplays;
159
160 std::shared_ptr<HwcDisplayPipe> mDisplayPipe;
161
162 HWC2_PFN_HOTPLUG mHotplugFn;
163 hwc2_callback_data_t mHotplugData;
164 HWC2_PFN_REFRESH mRefreshFn;
165 hwc2_callback_data_t mRefreshData;
166 HWC2_PFN_VSYNC mVsyncFn;
167 hwc2_callback_data_t mVsyncData;
168
169 uint32_t mVirtualDisplayIds;
170
171 uint32_t mDisplayRequests;
172};
173
174#endif/*MESON_HWC2_H*/
175