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