From bfb9ea7a06021fb601702e13b528c0a83b082871 Mon Sep 17 00:00:00 2001 From: pxd2022 Date: Sat, 19 Oct 2024 10:22:52 +0000 Subject: [PATCH] jieou vdi hdi Signed-off-by: pxd2022 --- .../include/display_vdi_adapter_interface.h | 155 ++++++++++++++++++ .../display_command/display_cmd_responser.h | 3 +- .../display_command/display_cmd_responser.h | 2 +- .../display_command/display_cmd_responser.h | 31 +--- 4 files changed, 164 insertions(+), 27 deletions(-) create mode 100644 display/composer/common/include/display_vdi_adapter_interface.h diff --git a/display/composer/common/include/display_vdi_adapter_interface.h b/display/composer/common/include/display_vdi_adapter_interface.h new file mode 100644 index 00000000..dc38f0ee --- /dev/null +++ b/display/composer/common/include/display_vdi_adapter_interface.h @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 )(the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OHOS_HDI_VDI_ADAPTER_INTERFACE_H +#define OHOS_HDI_VDI_ADAPTER_INTERFACE_H + +#include +#include +#include "base/buffer_handle.h" +#include "v1_0/include/idisplay_composer_interface.h" +#include "v1_0/display_composer_type.h" +#include "v1_2/display_composer_type.h" +#include "v1_1/imode_callback.h" +#include "v1_1/iseamless_change_callback.h" + +namespace OHOS { +namespace HDI { +namespace Display { +namespace Composer { + +struct DisplayComposerVdiAdapter { + int32_t (*LoadVdiImpl)(); + int32_t (*DestroyVdiImpl)(); + int32_t (*RegHotPlugCallback)(HotPlugCallback cb, void* data); + int32_t (*GetDisplayCapability)(uint32_t devId, DisplayCapability& info); + int32_t (*GetDisplaySupportedModes)(uint32_t devId, std::vector& modes); + int32_t (*GetDisplayMode)(uint32_t devId, uint32_t& modeId); + int32_t (*SetDisplayMode)(uint32_t devId, uint32_t modeId); + int32_t (*GetDisplayPowerStatus)(uint32_t devId, V1_0::DispPowerStatus& status); + int32_t (*SetDisplayPowerStatus)(uint32_t devId, V1_0::DispPowerStatus status); + int32_t (*GetDisplayBacklight)(uint32_t devId, uint32_t& level); + int32_t (*SetDisplayBacklight)(uint32_t devId, uint32_t level); + int32_t (*GetDisplayProperty)(uint32_t devId, uint32_t id, uint64_t& value); + int32_t (*GetDisplayCompChange)(uint32_t devId, std::vector& layers, std::vector& types); + int32_t (*SetDisplayClientCrop)(uint32_t devId, const IRect& rect); + int32_t (*SetDisplayClientBuffer)(uint32_t devId, const BufferHandle& buffer, int32_t fence); + int32_t (*SetDisplayClientDamage)(uint32_t devId, std::vector& rects); + int32_t (*SetDisplayVsyncEnabled)(uint32_t devId, bool enabled); + int32_t (*RegDisplayVBlankCallback)(uint32_t devId, VBlankCallback cb, void* data); + int32_t (*GetDisplayReleaseFence)(uint32_t devId, std::vector& layers, std::vector& fences); + int32_t (*CreateVirtualDisplay)(uint32_t width, uint32_t height, int32_t& format, uint32_t& devId); + int32_t (*DestroyVirtualDisplay)(uint32_t devId); + int32_t (*SetVirtualDisplayBuffer)(uint32_t devId, const BufferHandle& buffer, const int32_t fence); + int32_t (*SetDisplayProperty)(uint32_t devId, uint32_t id, uint64_t value); + int32_t (*Commit)(uint32_t devId, int32_t& fence); + int32_t (*CreateLayer)(uint32_t devId, const LayerInfo& layerInfo, uint32_t& layerId); + int32_t (*DestroyLayer)(uint32_t devId, uint32_t layerId); + int32_t (*PrepareDisplayLayers)(uint32_t devId, bool& needFlushFb); + int32_t (*SetLayerAlpha)(uint32_t devId, uint32_t layerId, const LayerAlpha& alpha); + int32_t (*SetLayerRegion)(uint32_t devId, uint32_t layerId, const IRect& rect); + int32_t (*SetLayerCrop)(uint32_t devId, uint32_t layerId, const IRect& rect); + int32_t (*SetLayerZorder)(uint32_t devId, uint32_t layerId, uint32_t zorder); + int32_t (*SetLayerPreMulti)(uint32_t devId, uint32_t layerId, bool preMul); + int32_t (*SetLayerTransformMode)(uint32_t devId, uint32_t layerId, TransformType type); + int32_t (*SetLayerDirtyRegion)(uint32_t devId, uint32_t layerId, const std::vector& rects); + int32_t (*SetLayerVisibleRegion)(uint32_t devId, uint32_t layerId, std::vector& rects); + int32_t (*SetLayerBuffer)(uint32_t devId, uint32_t layerId, const BufferHandle& buffer, int32_t fence); + int32_t (*SetLayerCompositionType)(uint32_t devId, uint32_t layerId, V1_0::CompositionType type); + int32_t (*SetLayerBlendType)(uint32_t devId, uint32_t layerId, BlendType type); + int32_t (*SetLayerMaskInfo)(uint32_t devId, uint32_t layerId, const MaskInfo maskInfo); + int32_t (*SetLayerColor)(uint32_t devId, uint32_t layerId, const LayerColor& layerColor); + int32_t (*RegSeamlessChangeCallback)(SeamlessChangeCallback cb, void* data); + int32_t (*GetDisplaySupportedModesExt)(uint32_t devId, std::vector& modes); + int32_t (*SetDisplayModeAsync)(uint32_t devId, uint32_t modeId, ModeCallback cb, void *data); + int32_t (*GetDisplayVBlankPeriod)(uint32_t devId, uint64_t& period); + int32_t (*SetLayerPerFrameParameter)( + uint32_t devId, uint32_t layerId, const std::string& key, const std::vector& value); + int32_t (*GetSupportedLayerPerFrameParameterKey)(std::vector& keys); + int32_t (*SetDisplayOverlayResolution)(uint32_t devId, uint32_t width, uint32_t height); + int32_t (*RegRefreshCallback)(RefreshCallback cb, void* data); + int32_t (*GetDisplaySupportedColorGamuts)(uint32_t devId, std::vector& gamuts); + int32_t (*GetHDRCapabilityInfos)(uint32_t devId, HDRCapability& info); + int32_t (*RegDisplayVBlankIdleCallback)(VBlankIdleCallback cb, void* data); + int32_t (*SetDisplayConstraint)(uint32_t devId, uint64_t frameID, uint64_t ns, uint32_t type); + int32_t (*SetHardwareCursorPosition)(uint32_t devId, int32_t x, int32_t y); + int32_t (*EnableHardwareCursorStats)(uint32_t devId, bool enable); + int32_t (*GetHardwareCursorStats)(uint32_t devId, uint32_t& frameCount, uint32_t& vsyncCount); +}; + +using LoadVdiImplFunc = int32_t (*)(); +using DestroyVdiImplFunc = int32_t (*)(); +using RegHotPlugCallbackFunc = int32_t (*)(HotPlugCallback cb, void* data); +using GetDisplayCapabilityFunc = int32_t (*)(uint32_t devId, DisplayCapability& info); +using GetDisplaySupportedModesFunc = int32_t (*)(uint32_t devId, std::vector& modes); +using GetDisplayModeFunc = int32_t (*)(uint32_t devId, uint32_t& modeId); +using SetDisplayModeFunc = int32_t (*)(uint32_t devId, uint32_t modeId); +using GetDisplayPowerStatusFunc = int32_t (*)(uint32_t devId, V1_0::DispPowerStatus& status); +using SetDisplayPowerStatusFunc = int32_t (*)(uint32_t devId, V1_0::DispPowerStatus status); +using GetDisplayBacklightFunc = int32_t (*)(uint32_t devId, uint32_t& level); +using SetDisplayBacklightFunc = int32_t (*)(uint32_t devId, uint32_t level); +using GetDisplayPropertyFunc = int32_t (*)(uint32_t devId, uint32_t id, uint64_t& value); +using GetDisplayCompChangeFunc = int32_t (*)( + uint32_t devId, std::vector& layers, std::vector& types); +using SetDisplayClientCropFunc = int32_t (*)(uint32_t devId, const IRect& rect); +using SetDisplayClientBufferFunc = int32_t (*)(uint32_t devId, const BufferHandle& buffer, int32_t fence); +using SetDisplayClientDamageFunc = int32_t (*)(uint32_t devId, std::vector& rects); +using SetDisplayVsyncEnabledFunc = int32_t (*)(uint32_t devId, bool enabled); +using RegDisplayVBlankCallbackFunc = int32_t (*)(uint32_t devId, VBlankCallback cb, void* data); +using GetDisplayReleaseFenceFunc = int32_t (*)( + uint32_t devId, std::vector& layers, std::vector& fences); +using CreateVirtualDisplayFunc = int32_t (*)(uint32_t width, uint32_t height, int32_t& format, uint32_t& devId); +using DestroyVirtualDisplayFunc = int32_t (*)(uint32_t devId); +using SetVirtualDisplayBufferFunc = int32_t (*)(uint32_t devId, const BufferHandle& buffer, const int32_t fence); +using SetDisplayPropertyFunc = int32_t (*)(uint32_t devId, uint32_t id, uint64_t value); +using CommitFunc = int32_t (*)(uint32_t devId, int32_t& fence); +using CreateLayerFunc = int32_t (*)(uint32_t devId, const LayerInfo& layerInfo, uint32_t& layerId); +using DestroyLayerFunc = int32_t (*)(uint32_t devId, uint32_t layerId); +using PrepareDisplayLayersFunc = int32_t (*)(uint32_t devId, bool& needFlushFb); +using SetLayerAlphaFunc = int32_t (*)(uint32_t devId, uint32_t layerId, const LayerAlpha& alpha); +using SetLayerRegionFunc = int32_t (*)(uint32_t devId, uint32_t layerId, const IRect& rect); +using SetLayerCropFunc = int32_t (*)(uint32_t devId, uint32_t layerId, const IRect& rect); +using SetLayerZorderFunc = int32_t (*)(uint32_t devId, uint32_t layerId, uint32_t zorder); +using SetLayerPreMultiFunc = int32_t (*)(uint32_t devId, uint32_t layerId, bool preMul); +using SetLayerTransformModeFunc = int32_t (*)(uint32_t devId, uint32_t layerId, TransformType type); +using SetLayerDirtyRegionFunc = int32_t (*)(uint32_t devId, uint32_t layerId, const std::vector& rects); +using SetLayerVisibleRegionFunc = int32_t (*)(uint32_t devId, uint32_t layerId, std::vector& rects); +using SetLayerBufferFunc = int32_t (*)(uint32_t devId, uint32_t layerId, const BufferHandle& buffer, int32_t fence); +using SetLayerCompositionTypeFunc = int32_t (*)(uint32_t devId, uint32_t layerId, V1_0::CompositionType type); +using SetLayerBlendTypeFunc = int32_t (*)(uint32_t devId, uint32_t layerId, BlendType type); +using SetLayerMaskInfoFunc = int32_t (*)(uint32_t devId, uint32_t layerId, const MaskInfo maskInfo); +using SetLayerColorFunc = int32_t (*)(uint32_t devId, uint32_t layerId, const LayerColor& layerColor); +using RegSeamlessChangeCallbackFunc = int32_t (*)(SeamlessChangeCallback cb, void* data); +using GetDisplaySupportedModesExtFunc = int32_t (*)(uint32_t devId, std::vector& modes); +using SetDisplayModeAsyncFunc = int32_t (*)(uint32_t devId, uint32_t modeId, ModeCallback cb, void *data); +using GetDisplayVBlankPeriodFunc = int32_t (*)(uint32_t devId, uint64_t& period); +using SetLayerPerFrameParameterFunc = int32_t (*)( + uint32_t devId, uint32_t layerId, const std::string& key, const std::vector& value); +using GetSupportedLayerPerFrameParameterKeyFunc = int32_t (*)(std::vector& keys); +using SetDisplayOverlayResolutionFunc = int32_t (*)(uint32_t devId, uint32_t width, uint32_t height); +using RegRefreshCallbackFunc = int32_t (*)(RefreshCallback cb, void* data); +using GetDisplaySupportedColorGamutsFunc = int32_t (*)(uint32_t devId, std::vector& gamuts); +using GetHDRCapabilityInfosFunc = int32_t (*)(uint32_t devId, HDRCapability& info); +using RegDisplayVBlankIdleCallbackFunc = int32_t (*)(VBlankIdleCallback cb, void* data); +using SetDisplayConstraintFunc = int32_t (*)(uint32_t devId, uint64_t frameID, uint64_t ns, uint32_t type); +using SetHardwareCursorPositionFunc = int32_t (*)(uint32_t devId, int32_t x, int32_t y); +using EnableHardwareCursorStatsFunc = int32_t (*)(uint32_t devId, bool enable); +using GetHardwareCursorStatsFunc = int32_t (*)(uint32_t devId, uint32_t& frameCount, uint32_t& vsyncCount); + +} // namespace Composer +} // namespace Display +} // namespace HDI +} // namespace OHOS +#endif // OHOS_HDI_VDI_ADAPTER_INTERFACE_H diff --git a/display/composer/v1_0/display_command/display_cmd_responser.h b/display/composer/v1_0/display_command/display_cmd_responser.h index 5deab17a..d28ed1b7 100755 --- a/display/composer/v1_0/display_command/display_cmd_responser.h +++ b/display/composer/v1_0/display_command/display_cmd_responser.h @@ -39,6 +39,7 @@ #include "parameter.h" #include "v1_0/display_composer_type.h" #include "v1_0/mapper_stub.h" +#include "common/include/display_vdi_adapter_interface.h" #define DISPLAY_TRACE HdfTrace trace(__func__, "HDI:DISP:") @@ -1147,7 +1148,7 @@ protected: std::mutex requestMutex_; std::mutex replyMutex_; }; -using HdiDisplayCmdResponser = DisplayCmdResponser, IDisplayComposerVdi>; +using HdiDisplayCmdResponser = DisplayCmdResponser, DisplayComposerVdiAdapter>; } // namespace V1_0 } // namespace Composer } // namespace Display diff --git a/display/composer/v1_1/display_command/display_cmd_responser.h b/display/composer/v1_1/display_command/display_cmd_responser.h index 63bc8c5b..e8dc17d6 100644 --- a/display/composer/v1_1/display_command/display_cmd_responser.h +++ b/display/composer/v1_1/display_command/display_cmd_responser.h @@ -47,7 +47,7 @@ public: private: using BaseType1_0 = V1_0::DisplayCmdResponser; }; -using HdiDisplayCmdResponser = DisplayCmdResponser, IDisplayComposerVdi>; +using HdiDisplayCmdResponser = DisplayCmdResponser, DisplayComposerVdiAdapter>; } // namespace V1_1 } // namespace Composer } // namespace Display diff --git a/display/composer/v1_2/display_command/display_cmd_responser.h b/display/composer/v1_2/display_command/display_cmd_responser.h index 2ee974fd..52f3761e 100644 --- a/display/composer/v1_2/display_command/display_cmd_responser.h +++ b/display/composer/v1_2/display_command/display_cmd_responser.h @@ -40,7 +40,7 @@ typedef struct CommitInfo { std::vector fences; } CommitInfo; -template +template class DisplayCmdResponser : public V1_1::DisplayCmdResponser { public: static std::unique_ptr Create(VdiImpl* impl, std::shared_ptr cacheMgr) @@ -52,23 +52,8 @@ public: return std::make_unique(impl, cacheMgr); } - static std::unique_ptr CreateV1_1( - VdiImpl1_1* impl, std::shared_ptr cacheMgr) - { - DISPLAY_CHK_RETURN(impl == nullptr, nullptr, - HDF_LOGE("%{public}s: error, VdiImpl is nullptr", __func__)); - DISPLAY_CHK_RETURN(cacheMgr == nullptr, nullptr, - HDF_LOGE("%{public}s: error, VdiImpl is nullptr", __func__)); - return std::make_unique(cacheMgr, impl); - } - DisplayCmdResponser(VdiImpl* impl, std::shared_ptr cacheMgr) : BaseType1_1(impl, cacheMgr) {} - DisplayCmdResponser(std::shared_ptr cacheMgr, VdiImpl1_1* impl) - : BaseType1_1(impl, cacheMgr), - vdiImpl1_1_(impl) - {} - virtual ~DisplayCmdResponser() {} int32_t ProcessRequestCmd(CommandDataUnpacker& unpacker, int32_t cmd, @@ -303,9 +288,10 @@ REPLY: ret = unpacker.ReadUint32(type) ? HDF_SUCCESS : HDF_FAILURE; DISPLAY_CHECK(ret != HDF_SUCCESS, goto EXIT); - if (vdiImpl1_1_ != nullptr) { - ret = vdiImpl1_1_->SetDisplayConstraint(devId, frameID, ns, type); - } + + DISPLAY_CHECK(impl_ == nullptr || impl_->SetDisplayConstraint == nullptr, goto EXIT); + ret = impl_->SetDisplayConstraint(devId, frameID, ns, type); + DISPLAY_CHECK(ret != HDF_SUCCESS && ret != DISPLAY_NOT_SUPPORT && ret != HDF_ERR_NOT_SUPPORT, goto EXIT); EXIT: if (ret != HDF_SUCCESS) { @@ -344,16 +330,11 @@ private: using BaseType1_1::OnSetLayerColor; using BaseType1_1::CmdRequestDataRead; using BaseType1_1::CmdRequestDataWrite; - VdiImpl1_1* vdiImpl1_1_ = nullptr; using BaseType1_1::requestMutex_; using BaseType1_1::replyMutex_; }; -using HdiDisplayCmdResponser = - DisplayCmdResponser, IDisplayComposerVdi, IDisplayComposerVdiV1_1>; - -using HdiDisplayCmdResponser_1_1 = - DisplayCmdResponser, IDisplayComposerVdi, IDisplayComposerVdiV1_1>; +using HdiDisplayCmdResponser = DisplayCmdResponser, DisplayComposerVdiAdapter>; } // namespace V1_2 } // namespace Composer -- Gitee