• 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 constexpr uint32_t INVALIDE_DISPLAY_ID = 0xffffffff;
30 constexpr uint32_t DISPLAY_TYPE_DRM = (1U << 31);
31 
32 class VsyncCallBack {
33 public:
34     VsyncCallBack(VBlankCallback cb, void *data);
35     virtual void Vsync(unsigned int sequence, uint64_t ns);
~VsyncCallBack()36     virtual ~VsyncCallBack() {}
37 
38 private:
39     VBlankCallback mVBlankCb;
40     void *mData;
41 };
42 
43 
44 class HdiDisplay {
45 public:
GetId()46     uint32_t GetId() const
47     {
48         return mId;
49     }
50     virtual int32_t Init();
DeInit()51     virtual void DeInit() {}
HdiDisplay()52     HdiDisplay() {}
53     virtual ~HdiDisplay();
GetDisplayCapability(DisplayCapability * info)54     virtual int32_t GetDisplayCapability(DisplayCapability *info)
55     {
56         return DISPLAY_NOT_SUPPORT;
57     }
GetDisplaySupportedModes(uint32_t * num,DisplayModeInfo * modes)58     virtual int32_t GetDisplaySupportedModes(uint32_t *num, DisplayModeInfo *modes)
59     {
60         return DISPLAY_NOT_SUPPORT;
61     }
GetDisplayMode(uint32_t * modeId)62     virtual int32_t GetDisplayMode(uint32_t *modeId)
63     {
64         return DISPLAY_NOT_SUPPORT;
65     }
SetDisplayMode(uint32_t modeId)66     virtual int32_t SetDisplayMode(uint32_t modeId)
67     {
68         return DISPLAY_NOT_SUPPORT;
69     }
GetDisplayPowerStatus(DispPowerStatus * status)70     virtual int32_t GetDisplayPowerStatus(DispPowerStatus *status)
71     {
72         return DISPLAY_NOT_SUPPORT;
73     }
SetDisplayPowerStatus(DispPowerStatus status)74     virtual int32_t SetDisplayPowerStatus(DispPowerStatus status)
75     {
76         return DISPLAY_NOT_SUPPORT;
77     }
GetDisplayBacklight(uint32_t * value)78     virtual int32_t GetDisplayBacklight(uint32_t *value)
79     {
80         return DISPLAY_NOT_SUPPORT;
81     }
SetDisplayBacklight(uint32_t value)82     virtual int32_t SetDisplayBacklight(uint32_t value)
83     {
84         return DISPLAY_NOT_SUPPORT;
85     }
86     virtual int32_t CreateLayer(const LayerInfo *layerInfo, uint32_t *layerId);
87     virtual int32_t CloseLayer(uint32_t layerId);
88     virtual int32_t PrepareDisplayLayers(bool *needFlushFb);
89     virtual int32_t Commit(int32_t *fence);
90     virtual int32_t GetDisplayCompChange(uint32_t *num, uint32_t *layers, int32_t *type);
91     virtual int32_t SetLayerZorder(uint32_t layerId, uint32_t zorder);
IsConnected()92     virtual bool IsConnected()
93     {
94         return false;
95     }
RegDisplayVBlankCallback(VBlankCallback cb,void * data)96     virtual int32_t RegDisplayVBlankCallback(VBlankCallback cb, void *data)
97     {
98         return DISPLAY_NOT_SUPPORT;
99     }
SetDisplayVsyncEnabled(bool enabled)100     virtual int32_t SetDisplayVsyncEnabled(bool enabled)
101     {
102         return DISPLAY_NOT_SUPPORT;
103     }
104     virtual int32_t GetDisplayReleaseFence(uint32_t *num, uint32_t *layers, int32_t *fences);
105     virtual int32_t SetDisplayClientBuffer(const BufferHandle *buffer, int32_t fence);
WaitForVBlank(uint64_t * ns)106     virtual int32_t WaitForVBlank(uint64_t *ns)
107     {
108         return DISPLAY_NOT_SUPPORT;
109     }
110     HdiLayer *GetHdiLayer(uint32_t id);
111 
112 protected:
113     virtual std::unique_ptr<HdiLayer> CreateHdiLayer(LayerType type);
114     std::unique_ptr<HdiComposer> mComposer;
115 
116     static uint32_t GetIdleId();
117     static uint32_t mIdleId;
118     static std::unordered_set<uint32_t> mIdSets;
119     uint32_t mId = INVALIDE_DISPLAY_ID;
120     std::unordered_map<uint32_t, std::unique_ptr<HdiLayer>> mLayersMap;
121     std::multiset<HdiLayer *, SortLayersByZ> mLayers;
122     std::unique_ptr<HdiLayer> mClientLayer;
123     std::vector<HdiLayer *> mChangeLayers;
124 };
125 } // namespace OHOS
126 } // namespace HDI
127 } // namespace DISPLAY
128 
129 #endif // HDI_DISPLAY_H