• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef HDI_DISPLAY_H
17 #define HDI_DISPLAY_H
18 #include <set>
19 #include <unordered_map>
20 #include <unordered_set>
21 #include <memory.h>
22 #include "display_device.h"
23 #include "hdi_composer.h"
24 #include "hdi_layer.h"
25 
26 namespace OHOS {
27     namespace HDI {
28         namespace DISPLAY {
29             const uint32_t INVALIDE_DISPLAY_ID = 0xffffffff;
30             const uint32_t DISPLAY_TYPE_DRM = (1 << 31);
31 
32             class VsyncCallBack {
33             public:
34                 VsyncCallBack(VBlankCallback cb, void *data, uint32_t pipe);
35                 virtual void Vsync(unsigned int sequence, uint64_t ns);
~VsyncCallBack()36                 virtual ~VsyncCallBack()
37                 {
38                 }
GetPipe()39                 uint32_t GetPipe()
40                 {
41                     return mPipe;
42                 }
43 
44             private:
45                 VBlankCallback mVBlankCb;
46                 void *mData;
47                 uint32_t mPipe;
48             };
49 
50             class HdiDisplay {
51             public:
GetId()52                 uint32_t GetId() const
53                 {
54                     return mId;
55                 }
56                 virtual int32_t Init();
DeInit()57                 virtual void DeInit()
58                 {
59                 }
HdiDisplay()60                 HdiDisplay()
61                 {
62                 }
63                 virtual ~HdiDisplay();
GetDisplayCapability(DisplayCapability * info)64                 virtual int32_t GetDisplayCapability(DisplayCapability *info)
65                 {
66                     return DISPLAY_NOT_SUPPORT;
67                 }
GetDisplaySupportedModes(uint32_t * num,DisplayModeInfo * modes)68                 virtual int32_t GetDisplaySupportedModes(uint32_t *num, DisplayModeInfo *modes)
69                 {
70                     return DISPLAY_NOT_SUPPORT;
71                 }
GetDisplayMode(uint32_t * modeId)72                 virtual int32_t GetDisplayMode(uint32_t *modeId)
73                 {
74                     return DISPLAY_NOT_SUPPORT;
75                 }
SetDisplayMode(uint32_t modeId)76                 virtual int32_t SetDisplayMode(uint32_t modeId)
77                 {
78                     return DISPLAY_NOT_SUPPORT;
79                 }
GetDisplayPowerStatus(DispPowerStatus * status)80                 virtual int32_t GetDisplayPowerStatus(DispPowerStatus *status)
81                 {
82                     return DISPLAY_NOT_SUPPORT;
83                 }
SetDisplayPowerStatus(DispPowerStatus status)84                 virtual int32_t SetDisplayPowerStatus(DispPowerStatus status)
85                 {
86                     return DISPLAY_NOT_SUPPORT;
87                 }
GetDisplayBacklight(uint32_t * value)88                 virtual int32_t GetDisplayBacklight(uint32_t *value)
89                 {
90                     return DISPLAY_NOT_SUPPORT;
91                 }
SetDisplayBacklight(uint32_t value)92                 virtual int32_t SetDisplayBacklight(uint32_t value)
93                 {
94                     return DISPLAY_NOT_SUPPORT;
95                 }
96                 virtual int32_t CreateLayer(const LayerInfo *layerInfo, uint32_t *layerId);
97                 virtual int32_t CloseLayer(uint32_t layerId);
98                 virtual int32_t PrepareDisplayLayers(bool *needFlushFb);
99                 virtual int32_t Commit(int32_t *fence);
100                 virtual int32_t GetDisplayCompChange(uint32_t *num, uint32_t *layers, int32_t *type);
101                 virtual int32_t SetLayerZorder(uint32_t layerId, uint32_t zorder);
IsConnected()102                 virtual bool IsConnected()
103                 {
104                     return false;
105                 }
RegDisplayVBlankCallback(VBlankCallback cb,void * data)106                 virtual int32_t RegDisplayVBlankCallback(VBlankCallback cb, void *data)
107                 {
108                     return DISPLAY_NOT_SUPPORT;
109                 }
SetDisplayVsyncEnabled(bool enabled)110                 virtual int32_t SetDisplayVsyncEnabled(bool enabled)
111                 {
112                     return DISPLAY_NOT_SUPPORT;
113                 }
114                 virtual int32_t GetDisplayReleaseFence(uint32_t *num, uint32_t *layers, int32_t *fences);
115                 virtual int32_t SetDisplayClientBuffer(const BufferHandle *buffer, int32_t fence);
WaitForVBlank(uint64_t * ns)116                 virtual int32_t WaitForVBlank(uint64_t *ns)
117                 {
118                     return DISPLAY_NOT_SUPPORT;
119                 }
120                 HdiLayer *GetHdiLayer(uint32_t id);
121 
122             protected:
123                 virtual std::unique_ptr<HdiLayer> CreateHdiLayer(LayerType type);
124                 std::unique_ptr<HdiComposer> mComposer;
125 
126                 static uint32_t GetIdleId();
127                 static uint32_t mIdleId;
128                 static std::unordered_set<uint32_t> mIdSets;
129                 uint32_t mId = INVALIDE_DISPLAY_ID;
130                 std::unordered_map<uint32_t, std::unique_ptr<HdiLayer>> mLayersMap;
131                 std::multiset<HdiLayer *, SortLayersByZ> mLayers;
132                 std::unique_ptr<HdiLayer> mClientLayer;
133                 std::vector<HdiLayer *> mChangeLayers;
134             };
135         } // namespace OHOS
136     }     // namespace HDI
137 } // namespace DISPLAY
138 
139 #endif // HDI_DISPLAY_H
140