summaryrefslogtreecommitdiff
path: root/hwc2/include/Hwcomposer.h (plain)
blob: 76c1b7c7184e8c5515582cd9aebf9b06b2dd7e1d
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
32namespace android {
33namespace amlogic {
34
35class Hwcomposer : public hwc2_device_t {
36public:
37 virtual ~Hwcomposer();
38public:
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(private_module_t *grallocModule);
104 virtual void deinitialize();
105
106public:
107 VsyncManager* getVsyncManager();
108 private_module_t* getGrallocModule();
109
110 IDisplayDevice* getDisplayDevice(int disp);
111 UeventObserver* getUeventObserver();
112 IPlatFactory* getPlatFactory() {return mPlatFactory;}
113
114 void (*pfnHotplug)(hwc2_callback_data_t, hwc2_display_t, int32_t);
115 void (*pfnRefresh)(hwc2_callback_data_t, hwc2_display_t);
116 void (*pfnVsync)(hwc2_callback_data_t, hwc2_display_t, int64_t);
117
118protected:
119 Hwcomposer(IPlatFactory *factory);
120
121public:
122 static Hwcomposer& getInstance() {
123 Hwcomposer *instance = sInstance;
124 if (instance == 0) {
125 instance = createHwcomposer();
126 sInstance = instance;
127 }
128 return *sInstance;
129 }
130 static void releaseInstance() {
131 delete sInstance;
132 sInstance = NULL;
133 }
134 // Need to be implemented
135 static Hwcomposer* createHwcomposer();
136
137private:
138 hwc2_callback_data_t hotplug_cb_data;
139 hwc2_callback_data_t refresh_cb_data;
140 hwc2_callback_data_t vsync_cb_data;
141
142 // plugin through set
143 IPlatFactory *mPlatFactory;
144 VsyncManager *mVsyncManager;
145 private_module_t *mGrallocModule;
146 UeventObserver *mUeventObserver;
147
148 Vector<IDisplayDevice*> mDisplayDevices;
149
150 bool mInitialized;
151
152 static Hwcomposer *sInstance;
153};
154
155} // namespace amlogic
156}
157
158#endif /*HW_COMPOSER_H*/
159