blob: 0e78bdf723445d46c56e3fc31b6be734cd0dcbc2
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 IDISPLAY_DEVICE_H |
20 | #define IDISPLAY_DEVICE_H |
21 | |
22 | #include <utils/KeyedVector.h> |
23 | #include <Dump.h> |
24 | #include <hardware/hwcomposer2.h> |
25 | #include <Hwcomposer.h> |
26 | #include <HwcLayer.h> |
27 | |
28 | namespace android { |
29 | namespace amlogic { |
30 | |
31 | enum { |
32 | HWC2_NO_LAYER = 0, |
33 | HWC2_ONE_LAYER = 1, |
34 | HWC2_TWO_LAYERS = 2, |
35 | HWC2_THREE_LAYERS = 3, |
36 | HWC2_MAX_LAYERS = HWC2_THREE_LAYERS, |
37 | }; |
38 | |
39 | |
40 | #define HWC2_HW_COMPOSE_WIDTH_MAX (1920) |
41 | #define HWC2_HW_COMPOSE_HEIGHT_MAX (1080) |
42 | |
43 | // display device interface |
44 | class IDisplayDevice { |
45 | public: |
46 | // display device type |
47 | enum { |
48 | DEVICE_PRIMARY = HWC_DISPLAY_PRIMARY, |
49 | DEVICE_EXTERNAL = HWC_DISPLAY_EXTERNAL, |
50 | DEVICE_VIRTUAL = HWC_DISPLAY_VIRTUAL, |
51 | DEVICE_COUNT, |
52 | }; |
53 | enum { |
54 | DEVICE_DISCONNECTED = 0, |
55 | DEVICE_CONNECTED, |
56 | }; |
57 | enum { |
58 | DEVICE_DISPLAY_OFF = 0, |
59 | DEVICE_DISPLAY_ON, |
60 | DEVICE_DISPLAY_STANDBY, |
61 | }; |
62 | public: |
63 | IDisplayDevice() {} |
64 | virtual ~IDisplayDevice() {} |
65 | public: |
66 | virtual int32_t acceptDisplayChanges() = 0; |
67 | virtual bool createLayer(hwc2_layer_t* outLayer) = 0; |
68 | virtual bool destroyLayer(hwc2_layer_t layer) = 0; |
69 | virtual int32_t getActiveConfig(hwc2_config_t* outConfig) = 0; |
70 | virtual int32_t getChangedCompositionTypes(uint32_t* outNumElements, hwc2_layer_t* outLayers, |
71 | int32_t* /*hwc2_composition_t*/ outTypes) = 0; |
72 | virtual int32_t getClientTargetSupport(uint32_t width, |
73 | uint32_t height, int32_t /*android_pixel_format_t*/ format, |
74 | int32_t /*android_dataspace_t*/ dataspace) = 0; |
75 | virtual int32_t getColorModes(uint32_t* outNumModes, |
76 | int32_t* /*android_color_mode_t*/ outModes) = 0; |
77 | virtual int32_t getDisplayAttribute(hwc2_config_t config, |
78 | int32_t /*hwc2_attribute_t*/ attribute, int32_t* outValue) = 0; |
79 | virtual int32_t getDisplayConfigs(uint32_t* outNumConfigs, hwc2_config_t* outConfigs) = 0; |
80 | virtual int32_t getDisplayName(uint32_t* outSize,char* outName) = 0; |
81 | virtual int32_t getDisplayRequests(int32_t* /*hwc2_display_request_t*/ outDisplayRequests, |
82 | uint32_t* outNumElements, hwc2_layer_t* outLayers, int32_t* /*hwc2_layer_request_t*/ outLayerRequests) = 0; |
83 | virtual int32_t getDisplayType(int32_t* /*hwc2_display_type_t*/ outType) = 0; |
84 | virtual int32_t getDozeSupport(int32_t* outSupport) = 0; |
85 | virtual int32_t getHdrCapabilities(uint32_t* outNumTypes, |
86 | int32_t* /*android_hdr_t*/ outTypes, float* outMaxLuminance, |
87 | float* outMaxAverageLuminance, float* outMinLuminance) = 0; |
88 | virtual int32_t getReleaseFences(uint32_t* outNumElements, hwc2_layer_t* outLayers, int32_t* outFences) = 0; |
89 | virtual int32_t presentDisplay(int32_t* outRetireFence) = 0; |
90 | virtual int32_t setActiveConfig(hwc2_config_t config) = 0; |
91 | virtual int32_t setClientTarget(buffer_handle_t target, |
92 | int32_t acquireFence, int32_t /*android_dataspace_t*/ dataspace, hwc_region_t damage) = 0; |
93 | virtual int32_t setColorMode(int32_t /*android_color_mode_t*/ mode) = 0; |
94 | virtual int32_t setColorTransform(const float* matrix, int32_t /*android_color_transform_t*/ hint) = 0; |
95 | // virtual int32_t setOutputBuffer(buffer_handle_t buffer, int32_t releaseFence) = 0; |
96 | virtual int32_t setPowerMode(int32_t /*hwc2_power_mode_t*/ mode) = 0; |
97 | virtual bool vsyncControl(bool enabled) = 0; |
98 | virtual int32_t validateDisplay(uint32_t* outNumTypes, uint32_t* outNumRequests) = 0; |
99 | virtual int32_t setCursorPosition(hwc2_layer_t layerId, int32_t x, int32_t y) = 0; |
100 | |
101 | // Virtual display. |
102 | virtual int32_t createVirtualDisplay(uint32_t width, uint32_t height, int32_t* format, hwc2_display_t* outDisplay) = 0; |
103 | virtual int32_t destroyVirtualDisplay(hwc2_display_t display) = 0; |
104 | virtual int32_t setOutputBuffer(buffer_handle_t buffer, int32_t releaseFence) = 0; |
105 | |
106 | // Other Display methods |
107 | virtual hwc2_display_t getId() const = 0; |
108 | virtual bool isConnected() const = 0; |
109 | |
110 | // device related operations |
111 | virtual bool initCheck() const = 0; |
112 | virtual bool initialize() = 0; |
113 | virtual void deinitialize() = 0; |
114 | virtual const char* getName() const = 0; |
115 | virtual int getDisplayId() const = 0; |
116 | |
117 | virtual HwcLayer* getLayerById(hwc2_layer_t layerId) = 0; |
118 | |
119 | // events |
120 | virtual void onVsync(int64_t timestamp) = 0; |
121 | virtual void onHotplug(int disp, bool connected) = 0; |
122 | virtual void dump(Dump& d) = 0; |
123 | |
124 | }; |
125 | |
126 | } |
127 | } |
128 | |
129 | #endif /* IDISPLAY_DEVICE_H */ |
130 |