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 | |
18 | class MesonHwc2 : public android::Singleton<MesonHwc2> { |
19 | /*hwc2 interface*/ |
20 | public: |
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*/ |
130 | public: |
131 | int32_t setPostProcessor(bool bEnable); |
132 | |
133 | uint32_t getDisplayRequest(); |
134 | int32_t handleDisplayRequest(uint32_t request); |
135 | |
136 | /*implement*/ |
137 | public: |
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 | |
142 | public: |
143 | MesonHwc2(); |
144 | virtual ~MesonHwc2(); |
145 | |
146 | /* for meson display service */ |
147 | public: |
148 | int32_t captureDisplayScreen(buffer_handle_t hnd); |
149 | |
150 | protected: |
151 | int32_t initialize(); |
152 | bool isDisplayValid(hwc2_display_t display); |
153 | |
154 | uint32_t getVirtualDisplayId(); |
155 | void freeVirtualDisplayId(uint32_t id); |
156 | |
157 | protected: |
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 |