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