summaryrefslogtreecommitdiff
path: root/hwc2/include/VirtualDevice.h (plain)
blob: 553d03c73789ab2895b23f819cddf84073930681
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
22namespace android {
23namespace amlogic {
24
25class VirtualDevice : public IDisplayDevice {
26 enum {
27 LAYER_MAX_NUM_CHANGE_TYPE = 16,
28 LAYER_MAX_NUM_SUPPORT = 16,
29 };
30public:
31 VirtualDevice(Hwcomposer& hwc);
32 virtual ~VirtualDevice();
33
34 friend class Hwcomposer;
35 friend class HwcLayer;
36
37public:
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 onHotplug(int disp, bool connected);
97 virtual void dump(Dump& d);
98
99private:
100 // For use by Device
101 int32_t postFramebuffer(int32_t* outRetireFence);
102
103 // Member variables
104 hwc2_display_t mId;
105 const char *mName;
106 bool mIsConnected;
107 Hwcomposer& mHwc;
108 uint32_t mWidth;
109 uint32_t mHeight;
110 int32_t mFormat;
111 char mDisplayMode[32];
112
113 int32_t /*android_color_mode_t*/ mColorMode;
114
115 // client target layer.
116 buffer_handle_t mClientTargetHnd;
117 hwc_region_t mClientTargetDamageRegion;
118 int32_t mTargetAcquireFence;
119
120 buffer_handle_t mVirtualHnd;
121 int32_t mVirtualReleaseFence;
122
123 int32_t mRetireFence;
124
125 // num of composition type changed layer.
126 uint32_t mNumLayersChangetype;
127 uint32_t mNumLayerChangerequest;
128
129 // layer
130 KeyedVector<hwc2_layer_t, HwcLayer*> mHwcLayersChangeType;
131 KeyedVector<hwc2_layer_t, HwcLayer*> mHwcLayers;
132
133 // lock
134 Mutex mLock;
135 bool mInitialized;
136};
137
138}
139}
140
141#endif /* VIRTUAL_DEVICE_H */
142
143