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