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