blob: 65aeb4098c654e70e46015e58babfa2ff217ce21
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 VIRTUAL_DEVICE_H |
20 | #define VIRTUAL_DEVICE_H |
21 | |
22 | namespace android { |
23 | namespace amlogic { |
24 | |
25 | class VirtualDevice : public IDisplayDevice { |
26 | enum { |
27 | LAYER_MAX_NUM_CHANGE_TYPE = 16, |
28 | LAYER_MAX_NUM_SUPPORT = 16, |
29 | }; |
30 | public: |
31 | VirtualDevice(Hwcomposer& hwc); |
32 | virtual ~VirtualDevice(); |
33 | |
34 | friend class Hwcomposer; |
35 | friend class HwcLayer; |
36 | |
37 | public: |
38 | // Required by HWC2 |
39 | virtual int32_t acceptDisplayChanges(); |
40 | virtual bool createLayer(hwc2_layer_t* outLayer); |
41 | virtual bool destroyLayer(hwc2_layer_t layer); |
42 | virtual int32_t getActiveConfig(hwc2_config_t* outConfig); |
43 | virtual int32_t getChangedCompositionTypes(uint32_t* outNumElements, hwc2_layer_t* outLayers, |
44 | int32_t* /*hwc2_composition_t*/ outTypes); |
45 | virtual int32_t getClientTargetSupport(uint32_t width, |
46 | uint32_t height, int32_t /*android_pixel_format_t*/ format, |
47 | int32_t /*android_dataspace_t*/ dataspace); |
48 | virtual int32_t getColorModes(uint32_t* outNumModes, |
49 | int32_t* /*android_color_mode_t*/ outModes); |
50 | virtual int32_t getDisplayAttribute(hwc2_config_t config, |
51 | int32_t /*hwc2_attribute_t*/ attribute, int32_t* outValue); |
52 | virtual int32_t getDisplayConfigs(uint32_t* outNumConfigs, hwc2_config_t* outConfigs); |
53 | virtual int32_t getDisplayName(uint32_t* outSize,char* outName); |
54 | virtual int32_t getDisplayRequests(int32_t* /*hwc2_display_request_t*/ outDisplayRequests, |
55 | uint32_t* outNumElements, hwc2_layer_t* outLayers, int32_t* /*hwc2_layer_request_t*/ outLayerRequests); |
56 | virtual int32_t getDisplayType(int32_t* /*hwc2_display_type_t*/ outType); |
57 | virtual int32_t getDozeSupport(int32_t* outSupport); |
58 | virtual int32_t getHdrCapabilities(uint32_t* outNumTypes, |
59 | int32_t* /*android_hdr_t*/ outTypes, float* outMaxLuminance, |
60 | float* outMaxAverageLuminance, float* outMinLuminance); |
61 | virtual int32_t getReleaseFences(uint32_t* outNumElements, hwc2_layer_t* outLayers, int32_t* outFences); |
62 | virtual int32_t presentDisplay(int32_t* outRetireFence); |
63 | virtual int32_t setActiveConfig(hwc2_config_t config); |
64 | virtual int32_t setClientTarget(buffer_handle_t target, |
65 | int32_t acquireFence, int32_t /*android_dataspace_t*/ dataspace, hwc_region_t damage); |
66 | virtual int32_t setColorMode(int32_t /*android_color_mode_t*/ mode); |
67 | virtual int32_t setColorTransform(const float* matrix, int32_t /*android_color_transform_t*/ hint); |
68 | |
69 | //virtual int32_t setOutputBuffer(buffer_handle_t buffer, int32_t releaseFence); // virtual display only |
70 | |
71 | virtual int32_t setPowerMode(int32_t /*hwc2_power_mode_t*/ mode); |
72 | virtual bool vsyncControl(bool enabled); // virtual hwc2_error_t setVsyncEnabled(hwc2_display_t display, int32_t /*hwc2_vsync_t*/ enabled); |
73 | virtual int32_t validateDisplay(uint32_t* outNumTypes, uint32_t* outNumRequests); |
74 | virtual int32_t setCursorPosition(hwc2_layer_t layerId, int32_t x, int32_t y); |
75 | |
76 | virtual int32_t createVirtualDisplay(uint32_t width, uint32_t height, int32_t* format, hwc2_display_t* outDisplay); |
77 | virtual int32_t destroyVirtualDisplay(hwc2_display_t display); |
78 | virtual int32_t setOutputBuffer(buffer_handle_t buffer, int32_t releaseFence); |
79 | |
80 | // Other Display methods |
81 | virtual Hwcomposer& getDevice() const { return mHwc; } |
82 | virtual hwc2_display_t getId() const { return mId; } |
83 | virtual bool isConnected() const { return mIsConnected; } |
84 | |
85 | // device related operations |
86 | virtual bool initCheck() const { return mInitialized; } |
87 | virtual bool initialize(); |
88 | virtual void deinitialize(); |
89 | virtual const char* getName() const { return mName; }; |
90 | virtual int getDisplayId() const { return mId; }; |
91 | virtual HwcLayer* getLayerById(hwc2_layer_t layerId); |
92 | virtual bool updateDisplayConfigs(); |
93 | |
94 | //events |
95 | virtual void onVsync(int64_t timestamp); |
96 | virtual void dump(Dump& d); |
97 | |
98 | private: |
99 | // For use by Device |
100 | int32_t postFramebuffer(int32_t* outRetireFence); |
101 | |
102 | // Member variables |
103 | hwc2_display_t mId; |
104 | const char *mName; |
105 | bool mIsConnected; |
106 | Hwcomposer& mHwc; |
107 | uint32_t mWidth; |
108 | uint32_t mHeight; |
109 | int32_t mFormat; |
110 | char mDisplayMode[32]; |
111 | |
112 | int32_t /*android_color_mode_t*/ mColorMode; |
113 | |
114 | // client target layer. |
115 | buffer_handle_t mClientTargetHnd; |
116 | hwc_region_t mClientTargetDamageRegion; |
117 | int32_t mTargetAcquireFence; |
118 | |
119 | buffer_handle_t mVirtualHnd; |
120 | int32_t mVirtualReleaseFence; |
121 | |
122 | int32_t mRetireFence; |
123 | |
124 | // num of composition type changed layer. |
125 | uint32_t mNumLayersChangetype; |
126 | uint32_t mNumLayerChangerequest; |
127 | |
128 | // layer |
129 | KeyedVector<hwc2_layer_t, HwcLayer*> mHwcLayersChangeType; |
130 | KeyedVector<hwc2_layer_t, HwcLayer*> mHwcLayers; |
131 | |
132 | // lock |
133 | Mutex mLock; |
134 | bool mInitialized; |
135 | }; |
136 | |
137 | } |
138 | } |
139 | |
140 | #endif /* VIRTUAL_DEVICE_H */ |
141 | |
142 |