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