blob: c77a8e8cfb4aca32a569aa77d0aa74018716f191
1 | /* |
2 | // Copyright (c) 2014 Intel Corporation |
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 | // This file is modified by Amlogic, Inc. 2017.01.17. |
17 | */ |
18 | |
19 | #ifndef HWCOMPOSER_H |
20 | #define HWCOMPOSER_H |
21 | |
22 | #include <EGL/egl.h> |
23 | #include <hardware/hwcomposer2.h> |
24 | #include <utils/Vector.h> |
25 | |
26 | #include <IDisplayDevice.h> |
27 | #include <VsyncManager.h> |
28 | #include <UeventObserver.h> |
29 | #include <IPlatFactory.h> |
30 | #include <gralloc_priv.h> |
31 | |
32 | namespace android { |
33 | namespace amlogic { |
34 | |
35 | class Hwcomposer : public hwc2_device_t { |
36 | public: |
37 | virtual ~Hwcomposer(); |
38 | public: |
39 | virtual int32_t createVirtualDisplay(uint32_t width, uint32_t height, |
40 | int32_t* /*android_pixel_format_t*/ format, hwc2_display_t* outDisplay); |
41 | |
42 | virtual int32_t destroyVirtualDisplay(hwc2_display_t display); |
43 | virtual void dump(uint32_t* outSize, char* outBuffer); |
44 | virtual uint32_t getMaxVirtualDisplayCount(); |
45 | virtual int32_t registerCallback(int32_t /*hwc2_callback_descriptor_t*/ descriptor, |
46 | hwc2_callback_data_t callbackData, hwc2_function_pointer_t pointer); |
47 | virtual int32_t acceptDisplayChanges(hwc2_display_t display); |
48 | virtual int32_t createLayer(hwc2_display_t display, hwc2_layer_t* outLayer); |
49 | virtual int32_t destroyLayer(hwc2_display_t display, hwc2_layer_t layer); |
50 | virtual int32_t getActiveConfig(hwc2_display_t display,hwc2_config_t* outConfig); |
51 | virtual int32_t getChangedCompositionTypes(hwc2_display_t display, |
52 | uint32_t* outNumElements, hwc2_layer_t* outLayers, |
53 | int32_t* /*hwc2_composition_t*/ outTypes); |
54 | virtual int32_t getClientTargetSupport(hwc2_display_t display, uint32_t width, |
55 | uint32_t height, int32_t /*android_pixel_format_t*/ format, |
56 | int32_t /*android_dataspace_t*/ dataspace); |
57 | virtual int32_t getColorModes(hwc2_display_t display, uint32_t* outNumModes, |
58 | int32_t* /*android_color_mode_t*/ outModes); |
59 | virtual int32_t getDisplayAttribute(hwc2_display_t display, hwc2_config_t config, |
60 | int32_t /*hwc2_attribute_t*/ attribute, int32_t* outValue); |
61 | virtual int32_t getDisplayConfigs(hwc2_display_t display, uint32_t* outNumConfigs, hwc2_config_t* outConfigs); |
62 | virtual int32_t getDisplayName(hwc2_display_t display, uint32_t* outSize,char* outName); |
63 | virtual int32_t getDisplayRequests(hwc2_display_t display, int32_t* /*hwc2_display_request_t*/ outDisplayRequests, |
64 | uint32_t* outNumElements, hwc2_layer_t* outLayers, int32_t* /*hwc2_layer_request_t*/ outLayerRequests); |
65 | virtual int32_t getDisplayType(hwc2_display_t display, int32_t* /*hwc2_display_type_t*/ outType); |
66 | virtual int32_t getDozeSupport(hwc2_display_t display, int32_t* outSupport); |
67 | virtual int32_t getHdrCapabilities(hwc2_display_t display, uint32_t* outNumTypes, |
68 | int32_t* /*android_hdr_t*/ outTypes, float* outMaxLuminance, |
69 | float* outMaxAverageLuminance, float* outMinLuminance); |
70 | virtual int32_t getReleaseFences(hwc2_display_t display, uint32_t* outNumElements, hwc2_layer_t* outLayers, int32_t* outFences); |
71 | virtual int32_t presentDisplay(hwc2_display_t display, int32_t* outRetireFence); |
72 | virtual int32_t setActiveConfig(hwc2_display_t display, hwc2_config_t config); |
73 | virtual int32_t setClientTarget(hwc2_display_t display, buffer_handle_t target, |
74 | int32_t acquireFence, int32_t /*android_dataspace_t*/ dataspace, hwc_region_t damage); |
75 | virtual int32_t setColorMode(hwc2_display_t display, int32_t /*android_color_mode_t*/ mode); |
76 | virtual int32_t setColorTransform(hwc2_display_t display, const float* matrix, int32_t /*android_color_transform_t*/ hint); |
77 | virtual int32_t setOutputBuffer(hwc2_display_t display, buffer_handle_t buffer, int32_t releaseFence); |
78 | virtual int32_t setPowerMode(hwc2_display_t display, int32_t /*hwc2_power_mode_t*/ mode); |
79 | virtual int32_t setVsyncEnabled(hwc2_display_t display, int32_t /*hwc2_vsync_t*/ enabled); |
80 | virtual int32_t validateDisplay(hwc2_display_t display, uint32_t* outNumTypes, uint32_t* outNumRequests); |
81 | virtual int32_t setCursorPosition(hwc2_display_t display, hwc2_layer_t layer, int32_t x, int32_t y); |
82 | virtual int32_t setLayerBuffer(hwc2_display_t display, hwc2_layer_t layer, buffer_handle_t buffer, int32_t acquireFence); |
83 | virtual int32_t setLayerSurfaceDamage(hwc2_display_t display, hwc2_layer_t layer, hwc_region_t damage); |
84 | virtual int32_t setLayerBlendMode(hwc2_display_t display, hwc2_layer_t layer, int32_t /*hwc2_blend_mode_t*/ mode); |
85 | virtual int32_t setLayerColor(hwc2_display_t display, hwc2_layer_t layer, hwc_color_t color); |
86 | virtual int32_t setLayerCompositionType(hwc2_display_t display, hwc2_layer_t layer, int32_t /*hwc2_composition_t*/ type); |
87 | virtual int32_t setLayerDataspace(hwc2_display_t display, hwc2_layer_t layer, int32_t /*android_dataspace_t*/ dataspace); |
88 | virtual int32_t setLayerDisplayFrame(hwc2_display_t display, hwc2_layer_t layer, hwc_rect_t frame); |
89 | virtual int32_t setLayerPlaneAlpha(hwc2_display_t display, hwc2_layer_t layer, float alpha); |
90 | virtual int32_t setLayerSidebandStream(hwc2_display_t display, hwc2_layer_t layer, const native_handle_t* stream); |
91 | virtual int32_t setLayerSourceCrop(hwc2_display_t display, hwc2_layer_t layer, hwc_frect_t crop); |
92 | virtual int32_t setLayerTransform(hwc2_display_t display, hwc2_layer_t layer, int32_t /*hwc_transform_t*/ transform); |
93 | virtual int32_t setLayerVisibleRegion(hwc2_display_t display, hwc2_layer_t layer, hwc_region_t visible); |
94 | virtual int32_t setLayerZOrder(hwc2_display_t display, hwc2_layer_t layer, uint32_t z); |
95 | |
96 | // callbacks |
97 | virtual void vsync(int disp, int64_t timestamp); |
98 | virtual void hotplug(int disp, bool connected); |
99 | virtual void refresh(int disp); |
100 | virtual bool release(); |
101 | |
102 | virtual bool initCheck() const; |
103 | virtual bool initialize(); |
104 | virtual void deinitialize(); |
105 | |
106 | public: |
107 | VsyncManager* getVsyncManager(); |
108 | |
109 | IDisplayDevice* getDisplayDevice(int disp); |
110 | UeventObserver* getUeventObserver(); |
111 | IPlatFactory* getPlatFactory() {return mPlatFactory;} |
112 | |
113 | void (*pfnHotplug)(hwc2_callback_data_t, hwc2_display_t, int32_t); |
114 | void (*pfnRefresh)(hwc2_callback_data_t, hwc2_display_t); |
115 | void (*pfnVsync)(hwc2_callback_data_t, hwc2_display_t, int64_t); |
116 | |
117 | protected: |
118 | Hwcomposer(IPlatFactory *factory); |
119 | |
120 | public: |
121 | static Hwcomposer& getInstance() { |
122 | Hwcomposer *instance = sInstance; |
123 | if (instance == 0) { |
124 | instance = createHwcomposer(); |
125 | sInstance = instance; |
126 | } |
127 | return *sInstance; |
128 | } |
129 | static void releaseInstance() { |
130 | delete sInstance; |
131 | sInstance = NULL; |
132 | } |
133 | // Need to be implemented |
134 | static Hwcomposer* createHwcomposer(); |
135 | |
136 | private: |
137 | hwc2_callback_data_t hotplug_cb_data; |
138 | hwc2_callback_data_t refresh_cb_data; |
139 | hwc2_callback_data_t vsync_cb_data; |
140 | |
141 | // plugin through set |
142 | IPlatFactory *mPlatFactory; |
143 | VsyncManager *mVsyncManager; |
144 | UeventObserver *mUeventObserver; |
145 | |
146 | Vector<IDisplayDevice*> mDisplayDevices; |
147 | |
148 | bool mInitialized; |
149 | |
150 | static Hwcomposer *sInstance; |
151 | }; |
152 | |
153 | } // namespace amlogic |
154 | } |
155 | |
156 | #endif /*HW_COMPOSER_H*/ |
157 |