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