1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
|
/*
* Copyright (C) 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef ANDROID_EXYNOS_HWC_H_
#define ANDROID_EXYNOS_HWC_H_
#include <hardware/hwcomposer2.h>
#include <cutils/atomic.h>
#include "ExynosMPPType.h"
#include "ExynosHWCModule.h"
#include "ExynosDevice.h"
//#define DISABLE_FENCE
enum {
HWC_CTL_MAX_OVLY_CNT = 100,
HWC_CTL_VIDEO_OVLY_CNT = 101,
HWC_CTL_DYNAMIC_RECOMP = 102,
HWC_CTL_SKIP_STATIC = 103,
/* HWC_CTL_DMA_BW_BAL = 104, */
HWC_CTL_SECURE_DMA = 105,
HWC_CTL_WINDOW_UPDATE = 106,
HWC_CTL_FORCE_PANIC = 107,
HWC_CTL_FORCE_GPU = 108,
HWC_CTL_SKIP_M2M_PROCESSING = 109,
HWC_CTL_DISPLAY_MODE = 110,
HWC_CTL_SKIP_RESOURCE_ASSIGN = 111,
HWC_CTL_SKIP_VALIDATE = 112,
HWC_CTL_DUMP_MID_BUF = 200,
HWC_CTL_CAPTURE_READBACK = 201,
HWC_CTL_ENABLE_COMPOSITION_CROP = 300,
HWC_CTL_ENABLE_EXYNOSCOMPOSITION_OPT = 301,
HWC_CTL_ENABLE_CLIENTCOMPOSITION_OPT = 302,
HWC_CTL_USE_MAX_G2D_SRC = 303,
HWC_CTL_ENABLE_HANDLE_LOW_FPS = 304,
HWC_CTL_ENABLE_EARLY_START_MPP = 305,
HWC_CTL_DDI_RESOLUTION_CHANGE = 306,
HWC_CTL_ENABLE_FENCE_TRACER = 307,
HWC_CTL_DO_FENCE_FILE_DUMP = 308,
HWC_CTL_SYS_FENCE_LOGGING = 309,
};
class ExynosDevice;
hwc2_function_pointer_t exynos_getFunction(struct hwc2_device* device, int32_t descriptor);
void exynos_getCapabilities(struct hwc2_device* device, uint32_t* outcount, int32_t* outcapabilities);
void exynos_dump(hwc2_device_t* device, uint32_t* outSize, char* outBuffer);
int32_t exynos_acceptDisplayChanges(hwc2_device_t* device, hwc2_display_t display);
int32_t exynos_createLayer(hwc2_device_t* device, hwc2_display_t display, hwc2_layer_t* outLayer);
int32_t exynos_createVirtualDisplay(hwc2_device_t* device, uint32_t width, uint32_t height,
int32_t* format, hwc2_display_t* outDisplay);
int32_t exynos_destroyLayer(hwc2_device_t* device, hwc2_display_t display, hwc2_layer_t layer);
int32_t exynos_destroyVirtualDisplay(hwc2_device_t* device, hwc2_display_t display);
int32_t exynos_getActiveConfig(hwc2_device_t *device, hwc2_display_t display, hwc2_config_t* outConfig);
int32_t exynos_getChangedCompositionTypes(hwc2_device_t *device, hwc2_display_t display,
uint32_t* outNumElements, hwc2_layer_t* outLayers, int32_t* outTypes);
int32_t exynos_getClientTargetSupport(hwc2_device_t *device, hwc2_display_t display, uint32_t width,
uint32_t height, int32_t format, int32_t dataSpace);
int32_t exynos_getColorModes(hwc2_device_t *device, hwc2_display_t display, uint32_t* outNumModes,
int32_t* outModes);
int32_t exynos_getDisplayAttribute(hwc2_device_t *device, hwc2_display_t display, hwc2_config_t config,
int32_t attribute, int32_t *outValue);
int32_t exynos_getDisplayConfigs(hwc2_device_t *device, hwc2_display_t display, uint32_t* outNumConfigs,
hwc2_config_t* outConfigs);
int32_t exynos_getDisplayName(hwc2_device_t *device, hwc2_display_t display, uint32_t* outSize, char* outName);
int32_t exynos_getDisplayRequests(hwc2_device_t *device, hwc2_display_t display, int32_t* outDisplayRequests,
uint32_t* outNumElements, hwc2_layer_t* outLayers, int32_t* outLayerRequests);
int32_t exynos_getDisplayType(hwc2_device_t *device, hwc2_display_t display, int32_t* outType);
int32_t exynos_getDozeSupport(hwc2_device_t *device, hwc2_display_t display, int32_t* outSupport);
int32_t exynos_getHdrCapabilities(hwc2_device_t *device, hwc2_display_t display, uint32_t* outNumTypes,
int32_t* outTypes, float* outMaxLuminance, float* outMaxAverageLuminance,
float* outMinLuminance);
int32_t exynos_getMaxVirtualDisplayCount(hwc2_device_t* device);
int32_t exynos_getReleaseFences(hwc2_device_t *device, hwc2_display_t display, uint32_t* outNumElements,
hwc2_layer_t* outLayers, int32_t* outFences);
int32_t exynos_presentDisplay(hwc2_device_t *device, hwc2_display_t display, int32_t* outRetireFence);
int32_t exynos_registerCallback(hwc2_device_t* device, int32_t descriptor,
hwc2_callback_data_t callbackData, hwc2_function_pointer_t pointer);
int32_t exynos_setActiveConfig(hwc2_device_t *device, hwc2_display_t display, hwc2_config_t config);
int32_t exynos_setClientTarget(hwc2_device_t *device, hwc2_display_t display, buffer_handle_t target,
int32_t acquireFence, int32_t dataspace, hwc_region_t damage);
int32_t exynos_setColorMode(hwc2_device_t *device, hwc2_display_t display, int32_t mode);
int32_t exynos_setColorTransform(hwc2_device_t *device, hwc2_display_t display, const float* matrix, int32_t hint);
int32_t exynos_setCursorPosition(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer,
int32_t x, int32_t y);
int32_t exynos_setLayerBlendMode(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer, int32_t mode);
int32_t exynos_setLayerBuffer(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer,
buffer_handle_t buffer, int32_t acquireFence);
int32_t exynos_setLayerColor(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer, hwc_color_t color);
int32_t exynos_setLayerCompositionType(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer, int32_t type);
int32_t exynos_setLayerDataspace(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer, int32_t dataspace);
int32_t exynos_setLayerDisplayFrame(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer,
hwc_rect_t frame);
int32_t exynos_setLayerPlaneAlpha(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer, float alpha);
int32_t exynos_setLayerSidebandStream(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer,
const native_handle_t* stream);
int32_t exynos_setLayerSourceCrop(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer, hwc_frect_t crop);
int32_t exynos_setLayerSurfaceDamage(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer, hwc_region_t damage);
int32_t exynos_setLayerTransform(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer, int32_t transform);
int32_t exynos_setLayerVisibleRegion(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer, hwc_region_t visible);
int32_t exynos_setLayerZOrder(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer, uint32_t z);
int32_t exynos_setOutputBuffer(hwc2_device_t *device, hwc2_display_t display, buffer_handle_t buffer, int32_t releaseFence);
int32_t exynos_setPowerMode(hwc2_device_t *device, hwc2_display_t display, int32_t mode);
int32_t exynos_setVsyncEnabled(hwc2_device_t *device, hwc2_display_t display, int32_t enabled);
int32_t exynos_validateDisplay(hwc2_device_t *device, hwc2_display_t display,
uint32_t* outNumTypes, uint32_t* outNumRequests);
int32_t exynos_setLayerPerFrameMetadata(hwc2_device_t* device, hwc2_display_t display,
hwc2_layer_t layer, uint32_t numElements,
const int32_t* /*hw2_per_frame_metadata_key_t*/ keys,
const float* metadata);
int32_t exynos_getPerFrameMetadataKeys(hwc2_device_t* device, hwc2_display_t display,
uint32_t* outNumKeys, int32_t* /*hwc2_per_frame_metadata_key_t*/ outKeys);
int32_t exynos_getRenderIntents(hwc2_device_t* device, hwc2_display_t display, int32_t mode,
uint32_t* outNumIntents, int32_t* /*android_render_intent_v1_1_t*/ outIntents);
int32_t exynos_setColorModeWithRenderIntent(hwc2_device_t* device, hwc2_display_t display,
int32_t /*android_color_mode_t*/ mode,
int32_t /*android_render_intent_v1_1_t */ intent);
int32_t exynos_getReadbackBufferAttributes(hwc2_device_t *dev, hwc2_display_t display,
int32_t* /*android_pixel_format_t*/ outFormat,
int32_t* /*android_dataspace_t*/ outDataspace);
int32_t exynos_setReadbackBuffer(hwc2_device_t *dev, hwc2_display_t display,
buffer_handle_t buffer, int32_t releaseFence);
int32_t exynos_getReadbackBufferFence(hwc2_device_t *dev, hwc2_display_t display,
int32_t* outFence);
int32_t exynos_getDisplayIdentificationData(hwc2_device_t* device, hwc2_display_t display, uint8_t* outPort,
uint32_t* outDataSize, uint8_t* outData);
int32_t exynos_getDisplayCapabilities(hwc2_device_t* device, hwc2_display_t display, uint32_t* outNumCapabilities,
uint32_t* outCapabilities);
int32_t exynos_setLayerColorTransform(hwc2_device_t* device, hwc2_display_t display, hwc2_layer_t layer,
const float* matrix);
int32_t exynos_getDisplayedContentSamplingAttributes(hwc2_device_t* device, hwc2_display_t display,
int32_t* /* andrmid_pixel_format_t */ format,
int32_t* /* android_dataspace_t */ dataspace,
uint8_t* /* mask of android_component_t */ supported_components);
int32_t exynos_setDisplayedContentSamplingEnabled(hwc2_device_t* device, hwc2_display_t display,
int32_t /*hwc2_displayed_content_sampling_t*/ enabled,
uint8_t /* mask of android_component_t */ component_mask,
uint64_t max_frames);
int32_t exynos_getDisplayedContentSample(hwc2_device_t* device, hwc2_display_t display,
uint64_t max_frames, uint64_t timestamp,
uint64_t* frame_count, int32_t samples_size[4], uint64_t* samples[4]);
int32_t exynos_setLayerPerFrameMetadataBlobs(hwc2_device_t* device, hwc2_display_t display,
hwc2_layer_t layer, uint32_t numElements, const int32_t* keys, const uint32_t* sizes,
const uint8_t* metadata);
int32_t exynos_getDisplayBrightnessSupport(hwc2_device_t* device, hwc2_display_t display, bool* outSupport);
int32_t exynos_setDisplayBrightness(hwc2_device_t* device, hwc2_display_t display, float brightness);
int32_t exynos_GetDisplayConnectionType(hwc2_device_t* device, hwc2_display_t display,
uint32_t* /*hwc2_display_connection_type_t*/ outType);
int32_t exynos_GetDisplayVsyncPeriod(hwc2_device_t* device, hwc2_display_t display,
hwc2_vsync_period_t* outVsyncPeriod);
int32_t exynos_SetActiveConfigWithConstraints(hwc2_device_t* device, hwc2_display_t display,
hwc2_config_t config, hwc_vsync_period_change_constraints_t* vsyncPeriodChangeConstraints,
hwc_vsync_period_change_timeline_t* outTimeline);
int32_t exynos_SetAutoLowLatencyMode(hwc2_device_t* device, hwc2_display_t display, bool on);
int32_t exynos_GetSupportedContentTypes(hwc2_device_t* device, hwc2_display_t display,
uint32_t* outNumSupportedContentTypes, uint32_t* outSupportedContentTypes);
int32_t exynos_SetContentType(hwc2_device_t* device, hwc2_display_t display,
int32_t /* hwc2_content_type_t */ contentType);
int32_t exynos_GetClientTargetProperty(hwc2_device_t* device, hwc2_display_t display,
hwc_client_target_property_t* outClientTargetProperty);
int32_t exynos_SetLayerGenericMetadata(hwc2_device_t* device, hwc2_display_t display,
hwc2_layer_t layer, uint32_t keyLength, const char* key,
bool mandatory, uint32_t valueLength, const uint8_t* value);
void exynos_GetLayerGenericMetadataKey(hwc2_device_t* device, uint32_t keyIndex,
uint32_t* outKeyLength, char* outKey, bool* outMandatory);
enum {
NO_DRM = 0,
NORMAL_DRM,
SECURE_DRM,
};
struct exynos_hwc2_device_t {
hwc2_device_t base;
ExynosDevice *device;
};
#endif
|