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