summaryrefslogtreecommitdiff
path: root/hwc2/include/PhysicalDevice.h (plain)
blob: aaa0292ab57318d8c3f6689ed884ea3d549d3884
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 PHYSICAL_DEVICE_H
20#define PHYSICAL_DEVICE_H
21
22#include <utils/KeyedVector.h>
23#include <SoftVsyncObserver.h>
24#include <IDisplayDevice.h>
25#include <HwcLayer.h>
26#include <IComposeDevice.h>
27#include <IComposeDeviceFactory.h>
28#include <DisplayHdmi.h>
29#include <systemcontrol/ISystemControlService.h>
30#include <systemcontrol/DisplayMode.h>
31#include <binder/Binder.h>
32#include <binder/IServiceManager.h>
33#include <utils/RefBase.h>
34
35#define DISPLAY_LOGO_INDEX "/sys/module/fb/parameters/osd_logo_index"
36#define DISPLAY_FB0_FREESCALE_SWTICH "/sys/class/graphics/fb0/free_scale_switch"
37
38namespace android {
39namespace amlogic {
40
41// class IHdcpControl;
42
43typedef struct hdr_capabilities {
44 bool init;
45 bool dvSupport;
46 bool hdrSupport;
47 int maxLuminance;
48 int avgLuminance;
49 int minLuminance;
50} hdr_capabilities_t;
51
52class FBContext {
53public:
54 FBContext()
55 : mStatus(false)
56 {
57 mFBInfo = new framebuffer_info_t();
58 }
59 virtual ~FBContext(){}
60
61 virtual framebuffer_info_t* getInfo() { return mFBInfo; }
62 virtual bool getStatus() { return mStatus; }
63 virtual void setStatus(bool status) { mStatus = status; }
64private:
65 framebuffer_info_t *mFBInfo;
66 bool mStatus;
67};
68
69class Hwcomposer;
70class SoftVsyncObserver;
71
72class PhysicalDevice : public IDisplayDevice {
73public:
74 PhysicalDevice(hwc2_display_t id, Hwcomposer& hwc, IComposeDeviceFactory* controlFactory);
75 ~PhysicalDevice();
76
77 friend class Hwcomposer;
78 friend class HwcLayer;
79
80 // Required by HWC2
81 virtual int32_t acceptDisplayChanges();
82 virtual bool createLayer(hwc2_layer_t* outLayer);
83 virtual bool destroyLayer(hwc2_layer_t layer);
84 virtual int32_t getActiveConfig(hwc2_config_t* outConfig);
85 virtual int32_t getChangedCompositionTypes(uint32_t* outNumElements, hwc2_layer_t* outLayers,
86 int32_t* /*hwc2_composition_t*/ outTypes);
87 virtual int32_t getClientTargetSupport(uint32_t width,
88 uint32_t height, int32_t /*android_pixel_format_t*/ format,
89 int32_t /*android_dataspace_t*/ dataspace);
90 virtual int32_t getColorModes(uint32_t* outNumModes,
91 int32_t* /*android_color_mode_t*/ outModes);
92 virtual int32_t getDisplayAttribute(hwc2_config_t config,
93 int32_t /*hwc2_attribute_t*/ attribute, int32_t* outValue);
94 virtual int32_t getDisplayConfigs(uint32_t* outNumConfigs, hwc2_config_t* outConfigs);
95 virtual int32_t getDisplayName(uint32_t* outSize,char* outName);
96 virtual int32_t getDisplayRequests(int32_t* /*hwc2_display_request_t*/ outDisplayRequests,
97 uint32_t* outNumElements, hwc2_layer_t* outLayers, int32_t* /*hwc2_layer_request_t*/ outLayerRequests);
98 virtual int32_t getDisplayType(int32_t* /*hwc2_display_type_t*/ outType);
99 virtual int32_t getDozeSupport(int32_t* outSupport);
100 virtual int32_t getHdrCapabilities(uint32_t* outNumTypes,
101 int32_t* /*android_hdr_t*/ outTypes, float* outMaxLuminance,
102 float* outMaxAverageLuminance, float* outMinLuminance);
103 virtual int32_t getReleaseFences(uint32_t* outNumElements, hwc2_layer_t* outLayers, int32_t* outFences);
104 virtual int32_t presentDisplay(int32_t* outRetireFence);
105 virtual int32_t setActiveConfig(hwc2_config_t config);
106 virtual int32_t setClientTarget(buffer_handle_t target,
107 int32_t acquireFence, int32_t /*android_dataspace_t*/ dataspace, hwc_region_t damage);
108 virtual int32_t setColorMode(int32_t /*android_color_mode_t*/ mode);
109 virtual int32_t setColorTransform(const float* matrix, int32_t /*android_color_transform_t*/ hint);
110
111 //virtual int32_t setOutputBuffer(buffer_handle_t buffer, int32_t releaseFence); // virtual display only
112
113 virtual int32_t setPowerMode(int32_t /*hwc2_power_mode_t*/ mode);
114 virtual bool vsyncControl(bool enabled); // virtual hwc2_error_t setVsyncEnabled(hwc2_display_t display, int32_t /*hwc2_vsync_t*/ enabled);
115 virtual int32_t validateDisplay(uint32_t* outNumTypes, uint32_t* outNumRequests);
116 virtual int32_t setCursorPosition(hwc2_layer_t layerId, int32_t x, int32_t y);
117
118 virtual int32_t createVirtualDisplay(uint32_t width, uint32_t height, int32_t* format, hwc2_display_t* outDisplay) = 0;
119 virtual int32_t destroyVirtualDisplay(hwc2_display_t display) = 0;
120 virtual int32_t setOutputBuffer(buffer_handle_t buffer, int32_t releaseFence) = 0;
121
122 // Other Display methods
123 virtual Hwcomposer& getDevice() const { return mHwc; }
124 virtual hwc2_display_t getId() const { return mId; }
125 virtual bool isConnected() const { return mConnectorPresent; }
126 virtual void updateHotplugState(bool connected);
127
128 // device related operations
129 virtual bool initCheck() const { return mInitialized; }
130 virtual bool initialize();
131 virtual void deinitialize();
132 virtual const char* getName() const { return mName; };
133 virtual int getDisplayId() const { return mId; };
134 virtual HwcLayer* getLayerById(hwc2_layer_t layerId);
135
136 // display config operations
137 virtual bool updateDisplayConfigs();
138 virtual void updateActiveDisplayAttribute();
139 void updateDisplayInfo(char defaultMode[64]);
140
141 // events
142 virtual void onVsync(int64_t timestamp);
143 virtual void onHotplug(int disp, bool connected);
144 virtual void dump(Dump& d);
145 DisplayHdmi* getDisplayHdmi() const { return mDisplayHdmi; };
146
147private:
148 // For use by Device
149 int32_t initDisplay();
150 int32_t postFramebuffer(int32_t* outRetireFence, bool hasVideoOverlay);
151 bool updateCursorBuffer();
152 int32_t getLineValue(const char *lineStr, const char *magicStr);
153
154 int32_t clearLayersStats();
155 int32_t preValidate();
156 int32_t parseHdrCapabilities();
157 void directCompose(framebuffer_info_t * fbInfo);
158 void ge2dCompose(framebuffer_info_t * fbInfo, bool hasVideoOverlay);
159 int32_t setOSD1Blank(bool cursorShow);
160 int32_t setOSD0Blank(bool blank);
161 bool layersStateCheck(int32_t renderMode, KeyedVector<hwc2_layer_t, HwcLayer*> & composeLayers);
162 int32_t composersFilter(KeyedVector<hwc2_layer_t, HwcLayer*>& composeLayers);
163
164 int32_t beginCompose();
165 int32_t finishCompose();
166
167 //swap the mHwcCurReleaseFence and mHwcPriorReleaseFence;
168 void swapReleaseFence();
169 //this function will take contorl of fencefd, if you need use it also, please dup it before call.
170 void addReleaseFence(hwc2_layer_t layerId, int32_t fenceFd);
171 void clearFenceList(KeyedVector<hwc2_layer_t, int32_t> * fenceList);
172 void dumpFenceList(KeyedVector<hwc2_layer_t, int32_t> * fenceList);
173 void dumpLayers(Vector < hwc2_layer_t > layerIds);
174 void dumpLayers(KeyedVector<hwc2_layer_t, HwcLayer*> layers);
175 void clearFramebuffer();
176
177 static void hdcpEventListener(void *data, bool status);
178 void setSecureStatus(bool status);
179
180 // for vpp post scale.
181 bool calReverseScale();
182
183 template <typename T, typename S>
184 static inline bool compareSize(T a, S b) {
185 if ((int32_t)(a.right - a.left) == (int32_t)(b.right - b.left)
186 && (int32_t)(a.bottom - a.top) == (int32_t)(b.bottom - b.top)) {
187 return true;
188 }
189 return false;
190 }
191
192 // Member variables
193 hwc2_display_t mId;
194 const char *mName;
195 bool mSecure;
196 Hwcomposer& mHwc;
197 DisplayHdmi* mDisplayHdmi;
198 IComposeDeviceFactory *mControlFactory;
199 SoftVsyncObserver *mVsyncObserver;
200
201 IComposeDevice *mComposer;
202
203 // DeviceControlFactory *mControlFactory;
204
205 // framebuffer_info_t *mFramebufferInfo;
206 private_handle_t *mFramebufferHnd;
207 FBContext *mCursorContext;
208 FBContext *mFramebufferContext;
209 int32_t mFbSlot;
210
211 sp<ISystemControlService> mSystemControl;
212
213 int32_t /*android_color_mode_t*/ mColorMode;
214
215 int32_t /*hwc2_power_mode_t*/ mPowerMode;
216
217 // client target layer.
218 buffer_handle_t mClientTargetHnd;
219 hwc_region_t mClientTargetDamageRegion;
220 int32_t mTargetAcquireFence;
221 int32_t mGE2DComposeFrameCount;
222 int32_t mDirectComposeFrameCount;
223 int32_t mPriorFrameRetireFence;
224 int32_t mRenderMode;
225 int32_t mPreviousRenderMode;
226 bool mIsValidated;
227 bool mIsContinuousBuf;
228
229 // num of composition type changed layer.
230 uint32_t mNumLayersChangetype;
231 uint32_t mNumLayerChangerequest;
232
233 // layer
234 hwc2_layer_t mDirectRenderLayerId;
235 hwc2_layer_t mVideoOverlayLayerId;
236 int32_t mGE2DClearVideoRegionCount;
237 Vector< hwc2_layer_t > mGE2DRenderSortedLayerIds;
238 KeyedVector<hwc2_layer_t, HwcLayer*> mHwcLayersChangeType;
239 KeyedVector<hwc2_layer_t, HwcLayer*> mHwcLayersChangeRequest;
240 KeyedVector<hwc2_layer_t, HwcLayer*> mHwcGlesLayers;
241 KeyedVector<hwc2_layer_t, HwcLayer*> mHwcLayers;
242 KeyedVector<hwc2_layer_t, HwcLayer*> mHwcSecureLayers;
243
244 // HDR Capabilities
245 hdr_capabilities_t mHdrCapabilities;
246
247 // fb sync requests.
248 hwc_fb_sync_request_t mFbSyncRequest;
249
250 // record the release fence of layer.
251 KeyedVector<hwc2_layer_t, int32_t> mLayerReleaseFences[2];
252 KeyedVector<hwc2_layer_t, int32_t> * mHwcCurReleaseFences;
253 KeyedVector<hwc2_layer_t, int32_t> * mHwcPriorReleaseFences;
254
255 // lock
256 Mutex mLock;
257 bool mInitialized;
258
259 // status of display connector.(hdmi, cvbs, panel)
260 bool mGetInitState;
261 bool mConnectorPresent;
262
263 //rever the scaled displayframe, for we use the vpp scale.
264 float mReverseScaleX;
265 float mReverseScaleY;
266
267 int mDisplayWidth;
268 int mDisplayHeight;
269 bool mFirstPostFb;
270
271 //omx handle for set omx pts
272 int32_t mOmxVideoHandle;
273};
274
275
276}
277}
278
279#endif /* PHYSICAL_DEVICE_H */
280