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