summaryrefslogtreecommitdiff
path: root/hwc2/MesonHwc2.h (plain)
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
19class MesonHwc2 {
20/*hwc2 interface*/
21public:
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*/
131public:
132 int32_t setPostProcessor(bool bEnable);
133
134 uint32_t getDisplayRequest();
135 int32_t handleDisplayRequest(uint32_t request);
136
137/*implement*/
138public:
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
143public:
144 MesonHwc2();
145 virtual ~MesonHwc2();
146
147protected:
148 int32_t initialize();
149 bool isDisplayValid(hwc2_display_t display);
150
151 uint32_t getVirtualDisplayId();
152 void freeVirtualDisplayId(uint32_t id);
153
154protected:
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