summaryrefslogtreecommitdiff
path: root/hwc2/Hwc2Display.h (plain)
blob: 60e715b6cd80201ec054e240a17ac202dadf33c5
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
10#ifndef HWC2_DISPLAY_H
11#define HWC2_DISPLAY_H
12
13#include <map>
14#include <vector>
15#include <unordered_map>
16#include <hardware/hwcomposer2.h>
17
18#include <BitsMap.h>
19#include <HwcDisplay.h>
20#include <HwcPowerMode.h>
21#include <HwcVsync.h>
22
23#include <ComposerFactory.h>
24#include <IComposer.h>
25#include <ICompositionStrategy.h>
26#include <EventThread.h>
27
28#include "Hwc2Layer.h"
29#include "MesonHwc2Defs.h"
30#include "HwcModeMgr.h"
31
32class Hwc2DisplayObserver {
33public:
34 Hwc2DisplayObserver(){};
35 virtual ~Hwc2DisplayObserver(){};
36 virtual void refresh() = 0;
37 virtual void onVsync(int64_t timestamp) = 0;
38 virtual void onHotplug(bool connected) = 0;
39};
40
41class Hwc2Display
42 : public HwcDisplay, public HwcVsyncObserver {
43public:
44 Hwc2Display(std::shared_ptr<Hwc2DisplayObserver> observer);
45 virtual ~Hwc2Display();
46
47 virtual void dump(String8 & dumpstr);
48
49/*HWC2 interfaces.*/
50public:
51 /*Connector releated.*/
52 virtual const char * getName();
53 virtual const drm_hdr_capabilities_t * getHdrCapabilities();
54#ifdef HWC_HDR_METADATA_SUPPORT
55 virtual hwc2_error_t getFrameMetadataKeys (
56 uint32_t* outNumKeys, int32_t* outKeys);
57#endif
58
59 /*Vsync*/
60 virtual hwc2_error_t setVsyncEnable(hwc2_vsync_t enabled);
61
62 /*Layer releated.*/
63 virtual std::shared_ptr<Hwc2Layer> getLayerById(hwc2_layer_t id);
64 virtual hwc2_error_t createLayer(hwc2_layer_t * outLayer);
65 virtual hwc2_error_t destroyLayer(hwc2_layer_t inLayer);
66 virtual hwc2_error_t setCursorPosition(hwc2_layer_t layer,
67 int32_t x, int32_t y);
68
69 virtual hwc2_error_t setColorTransform(const float* matrix,
70 android_color_transform_t hint);
71 virtual hwc2_error_t setPowerMode(hwc2_power_mode_t mode);
72
73 /*Compose flow*/
74 virtual hwc2_error_t validateDisplay(uint32_t* outNumTypes,
75 uint32_t* outNumRequests);
76 virtual hwc2_error_t presentDisplay(int32_t* outPresentFence);
77 virtual hwc2_error_t acceptDisplayChanges();
78 virtual hwc2_error_t getChangedCompositionTypes(
79 uint32_t* outNumElements, hwc2_layer_t* outLayers,
80 int32_t* outTypes);
81 virtual hwc2_error_t getDisplayRequests(
82 int32_t* outDisplayRequests, uint32_t* outNumElements,
83 hwc2_layer_t* outLayers,int32_t* outLayerRequests);
84 virtual hwc2_error_t setClientTarget( buffer_handle_t target,
85 int32_t acquireFence, int32_t dataspace, hwc_region_t damage);
86 virtual hwc2_error_t getReleaseFences(uint32_t* outNumElements,
87 hwc2_layer_t* outLayers, int32_t* outFences);
88
89 /*display attrbuites*/
90 virtual hwc2_error_t getDisplayConfigs(
91 uint32_t* outNumConfigs, hwc2_config_t* outConfigs);
92 virtual hwc2_error_t getDisplayAttribute(
93 hwc2_config_t config, int32_t attribute, int32_t* outValue);
94 virtual hwc2_error_t getActiveConfig(hwc2_config_t* outConfig);
95 virtual hwc2_error_t setActiveConfig(hwc2_config_t config);
96 virtual hwc2_error_t setCalibrateInfo(int32_t caliX,int32_t caliY,int32_t caliW,int32_t caliH);
97 virtual int32_t getDisplayIdentificationData(uint32_t &outPort,
98 std::vector<uint8_t> &outData);
99 virtual hwc2_error_t getDisplayCapabilities(
100 uint32_t* outNumCapabilities, uint32_t* outCapabilities);
101
102/*HwcDisplay interface*/
103public:
104 virtual int32_t initialize();
105
106 virtual int32_t setDisplayResource(
107 std::shared_ptr<HwDisplayCrtc> & crtc,
108 std::shared_ptr<HwDisplayConnector> & connector,
109 std::vector<std::shared_ptr<HwDisplayPlane>> & planes);
110 virtual int32_t setModeMgr(std::shared_ptr<HwcModeMgr> & mgr);
111 virtual int32_t setPostProcessor(
112 std::shared_ptr<HwcPostProcessor> processor);
113 virtual int32_t setVsync(std::shared_ptr<HwcVsync> vsync);
114 virtual int32_t blankDisplay();
115
116 virtual void onVsync(int64_t timestamp);
117 virtual void onHotplug(bool connected);
118 virtual void onUpdate(bool bHdcp);
119 virtual void onModeChanged(int stage);
120 virtual void getDispMode(drm_mode_info_t & dispMode);
121
122/* meson display ddk */
123public:
124 int32_t captureDisplayScreen(buffer_handle_t hnd);
125
126protected:
127 /* For compose. */
128 hwc2_error_t collectLayersForPresent();
129 hwc2_error_t collectComposersForPresent();
130 hwc2_error_t collectPlanesForPresent();
131 hwc2_error_t collectCompositionStgForPresent();
132 hwc2_error_t collectCompositionRequest(
133 uint32_t* outNumTypes, uint32_t* outNumRequests);
134
135 /*for calibrate display frame.*/
136 int32_t loadCalibrateInfo();
137 int32_t adjustDisplayFrame();
138
139 /*Layer id sequence no.*/
140 void initLayerIdGenerator();
141 hwc2_layer_t createLayerId();
142 void destroyLayerId(hwc2_layer_t id);
143
144 /*For debug*/
145 void dumpPresentLayers(String8 & dumpstr);
146 bool isLayerHideForDebug(hwc2_layer_t id);
147 void dumpHwDisplayPlane(String8 &dumpstr);
148
149protected:
150 std::unordered_map<hwc2_layer_t, std::shared_ptr<Hwc2Layer>> mLayers;
151 std::shared_ptr<Hwc2DisplayObserver> mObserver;
152 drm_hdr_capabilities_t mHdrCaps;
153
154 /*hw releated components*/
155 std::shared_ptr<HwDisplayCrtc> mCrtc;
156 std::shared_ptr<HwDisplayConnector> mConnector;
157 std::vector<std::shared_ptr<HwDisplayPlane>> mPlanes;
158
159 /*composition releated components*/
160 std::map<meson_composer_t, std::shared_ptr<IComposer>> mComposers;
161 std::shared_ptr<ICompositionStrategy> mCompositionStrategy;
162 bool mFailedDeviceComp;
163
164 /*display configs*/
165 std::shared_ptr<HwcModeMgr> mModeMgr;
166 std::shared_ptr<HwcVsync> mVsync;
167
168 /*layer id generate*/
169 std::shared_ptr<BitsMap> mLayersBitmap;
170 int32_t mLayerSeq;
171
172 /* members used in present.*/
173 std::vector<std::shared_ptr<DrmFramebuffer>> mPresentLayers;
174 std::vector<std::shared_ptr<IComposer>> mPresentComposers;
175 std::vector<std::shared_ptr<HwDisplayPlane>> mPresentPlanes;
176 std::shared_ptr<ICompositionStrategy> mPresentCompositionStg;
177
178 std::vector<hwc2_layer_t> mChangedLayers;
179 std::vector<hwc2_layer_t> mOverlayLayers;
180
181 /*all go to client composer*/
182 bool mForceClientComposer;
183 float mColorMatrix[16];
184
185 std::shared_ptr<HwcPowerMode> mPowerMode;
186 bool mSkipComposition;
187 bool mSignalHpd;
188 bool mValidateDisplay;
189
190 drm_mode_info_t mDisplayMode;
191 display_zoom_info_t mCalibrateInfo;
192 int mCalibrateCoordinates[4];
193
194 std::shared_ptr<HwcPostProcessor> mPostProcessor;
195 int32_t mProcessorFlags;
196
197#ifdef HWC_HDR_METADATA_SUPPORT
198 std::vector<drm_hdr_meatadata_t> mHdrKeys;
199#endif
200 std::mutex mMutex;
201
202 bool mVsyncState;
203};
204
205#endif/*HWC2_DISPLAY_H*/
206