update vpe

Signed-off-by: liushang <liushang2@huawei.com>
This commit is contained in:
liushang
2025-04-07 18:31:00 +08:00
parent 9b6ea3f2e3
commit f39f0643a7
201 changed files with 8110 additions and 11372 deletions
@@ -49,6 +49,9 @@ ExtensionManager::ExtensionManager()
{
(void)Init();
g_algoHandle = dlopen("libvideoprocessingengine_ext.z.so", RTLD_NOW);
if (g_algoHandle == nullptr) {
VPE_LOGE("dlopen libvideoprocessingengine_ext failed %{public}s", dlerror());
}
}
ExtensionManager::~ExtensionManager()
@@ -213,6 +216,19 @@ std::shared_ptr<DetailEnhancerBase> ExtensionManager::CreateDetailEnhancer(uint3
return impl;
}
std::shared_ptr<ContrastEnhancerBase> ExtensionManager::CreateContrastEnhancer(ContrastEnhancerType type) const
{
CHECK_AND_RETURN_RET_LOG(initialized_ == true, nullptr, "Not initialized");
auto extension = FindContrastEnhancerExtension(type);
CHECK_AND_RETURN_RET_LOG(extension != nullptr, nullptr,
"Create failed, get an empty extension. type: %{public}d", type);
auto impl = extension->creator();
CHECK_AND_RETURN_RET_LOG(impl != nullptr, nullptr,
"Call extension creator failed, return a empty impl, extension: %{public}s, type: %{public}d",
extension->info.name.c_str(), type);
return impl;
}
ExtensionList ExtensionManager::LoadExtensions() const
{
ExtensionList extensionList {};
@@ -487,7 +503,13 @@ T ExtensionManager::BuildCaps(const ExtensionList& extensionList) const
CHECK_AND_LOG(err == VPE_ALGO_ERR_OK, "Build caps failed, extension: %{public}s",
extension->info.name.c_str());
}
} else if constexpr (std::is_same_v<T, AihdrEnhancerCapabilityMap>) {
} else if constexpr (std::is_same_v<T, ContrastEnhancerCapabilityMap>) {
if (extension->info.type == ExtensionType::CONTRAST_ENHANCER) {
err = BuildContrastEnhancerCaps(extension, idx, capMap);
CHECK_AND_LOG(err == VPE_ALGO_ERR_OK, "Build caps failed, extension: %{public}s",
extension->info.name.c_str());
}
} else if constexpr (std::is_same_v<T, AihdrEnhancerCapabilityMap>) {
if (extension->info.type == ExtensionType::AIHDR_ENHANCER) {
err = BuildAihdrEnhancerCaps(extension, idx, capMap);
CHECK_AND_LOG(err == VPE_ALGO_ERR_OK, "Build caps failed, extension: %{public}s",
@@ -498,7 +520,6 @@ T ExtensionManager::BuildCaps(const ExtensionList& extensionList) const
return {};
}
}
return capMap;
}
@@ -526,7 +547,7 @@ std::shared_ptr<ColorSpaceConverterExtension> ExtensionManager::FindColorSpaceCo
(CSDesc).range, outputInfo.pixelFormat, outputInfo.colorSpace.metadataType);
return nullptr;
}
size_t idx = std::get<2>(*(iter->second.cbegin())); // 2
size_t idx = std::get<2>(*(iter->second.cbegin()));
for (const auto &cap : iter->second) {
if (std::get<0>(cap) == Rank::RANK_HIGH) {
idx = std::get<2>(cap); // 2
@@ -563,7 +584,7 @@ std::shared_ptr<MetadataGeneratorExtension> ExtensionManager::FindMetadataGenera
const auto iter = metadataGeneratorCapabilityMap.find(key);
CHECK_AND_RETURN_RET_LOG(iter != metadataGeneratorCapabilityMap.cend() && !iter->second.empty(), nullptr,
"CSC metadata generator extension is not found");
size_t idx = std::get<2>(*(iter->second.cbegin())); // 2
size_t idx = std::get<2>(*(iter->second.cbegin()));
for (const auto &cap : iter->second) {
if (std::get<0>(cap) == Rank::RANK_HIGH) {
idx = std::get<2>(cap); // 2
@@ -608,7 +629,7 @@ std::shared_ptr<AihdrEnhancerExtension> ExtensionManager::FindAihdrEnhancerExten
const auto iter = aihdrEnhancerCapabilityMap.find(key);
CHECK_AND_RETURN_RET_LOG(iter != aihdrEnhancerCapabilityMap.cend() && !iter->second.empty(), nullptr,
"Aihdr enhancer extension is not found");
size_t idx = std::get<2>(*(iter->second.cbegin())); // 2
size_t idx = std::get<2>(*(iter->second.cbegin()));
for (const auto &cap : iter->second) {
if (std::get<0>(cap) == Rank::RANK_HIGH) {
idx = std::get<2>(cap); // 2
@@ -618,6 +639,20 @@ std::shared_ptr<AihdrEnhancerExtension> ExtensionManager::FindAihdrEnhancerExten
return std::static_pointer_cast<AihdrEnhancerExtension>(extensionList[idx]);
}
std::shared_ptr<ContrastEnhancerExtension> ExtensionManager::FindContrastEnhancerExtension(
ContrastEnhancerType type) const
{
auto extensionList = LoadExtensions();
CHECK_AND_RETURN_RET_LOG(!extensionList.empty(), nullptr, "No extension found");
auto contrastEnhancerCapabilityMap = BuildCaps<ContrastEnhancerCapabilityMap>(extensionList);
CHECK_AND_RETURN_RET_LOG(!contrastEnhancerCapabilityMap.empty(), nullptr, "No extension available");
const auto iter = contrastEnhancerCapabilityMap.find(type);
CHECK_AND_RETURN_RET_LOG(iter != contrastEnhancerCapabilityMap.cend(), nullptr,
"Contrast enhancer Extension is not found");
size_t idx = iter->second;
return std::static_pointer_cast<ContrastEnhancerExtension>(extensionList[idx]);
}
VPEAlgoErrCode ExtensionManager::ExtractColorSpaceConverterCap(const ColorSpaceConverterCapability& cap, size_t idx,
ColorSpaceConverterCapabilityMap& colorSpaceConverterCapabilityMap) const
{
@@ -720,6 +755,16 @@ VPEAlgoErrCode ExtensionManager::BuildAihdrEnhancerCaps(const std::shared_ptr<Ex
}
return err;
}
VPEAlgoErrCode ExtensionManager::BuildContrastEnhancerCaps(const std::shared_ptr<ExtensionBase>& ext, size_t idx,
ContrastEnhancerCapabilityMap& contrastEnhancerCapabilityMap) const
{
auto realExtension = std::static_pointer_cast<ContrastEnhancerExtension>(ext);
auto capabilities = realExtension->capabilitiesBuilder();
for (const auto &level : capabilities.types) {
contrastEnhancerCapabilityMap.emplace(level, idx);
}
return VPE_ALGO_ERR_OK;
}
} // namespace Extension
} // namespace VideoProcessingEngine
} // namespace Media
@@ -0,0 +1,40 @@
/*
* 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 FRAMEWORK_ALGORITHM_EXTENSION_MANAGER_CONTRAST_ENHANCER_EXTENSION_H
#define FRAMEWORK_ALGORITHM_EXTENSION_MANAGER_CONTRAST_ENHANCER_EXTENSION_H
#include <vector>
#include "contrast_enhancer_base.h"
#include "contrast_enhancer_capability.h"
#include "extension_base.h"
namespace OHOS {
namespace Media {
namespace VideoProcessingEngine {
namespace Extension {
struct ContrastEnhancerExtension : public ExtensionBase {
ContrastEnhancerCreator creator;
ContrastEnhancerCapabilitiesBuilder capabilitiesBuilder;
};
} // namespace Extension
} // namespace VideoProcessingEngine
} // namespace Media
} // namespace OHOS
#endif // FRAMEWORK_ALGORITHM_EXTENSION_MANAGER_CONTRAST_ENHANCER_EXTENSION_H
@@ -28,7 +28,8 @@ enum class ExtensionType {
METADATA_GENERATOR,
DETAIL_ENHANCER,
VIDEO_REFRESHRATE_PREDICTION,
AIHDR_ENHANCER
AIHDR_ENHANCER,
CONTRAST_ENHANCER,
};
enum class Rank : uint32_t {
@@ -43,6 +43,7 @@
#include "colorspace_converter_display_extension.h"
#include "metadata_generator_extension.h"
#include "detail_enhancer_extension.h"
#include "contrast_enhancer_extension.h"
#include "video_refreshrate_prediction_extension.h"
#include "utils.h"
@@ -82,6 +83,7 @@ using AihdrEnhancerCapabilityMap =
std::map<
std::tuple<ColorSpaceDescription, GraphicPixelFormat>,
std::vector<std::tuple<Rank, int32_t, size_t>>>;
using ContrastEnhancerCapabilityMap = std::map<ContrastEnhancerType, size_t>;
using ColorSpaceConverterDisplaySet = std::set<std::shared_ptr<ColorSpaceConverterDisplayBase>>;
using ColorSpaceConverterDisplayExtensionSet = std::set<std::shared_ptr<ColorSpaceConverterDisplayExtension>>;
@@ -101,6 +103,7 @@ public:
Extension::ExtensionInfo &extensionInfo) const;
std::shared_ptr<DetailEnhancerBase> CreateDetailEnhancer(uint32_t level) const;
std::shared_ptr<VideoRefreshRatePredictionBase> CreateVideoRefreshRatePredictor() const;
std::shared_ptr<ContrastEnhancerBase> CreateContrastEnhancer(ContrastEnhancerType type) const;
using InstanceVariableType = std::variant<std::shared_ptr<ColorSpaceConverter>,
std::shared_ptr<MetadataGenerator>,
@@ -129,6 +132,7 @@ private:
MetadataGeneratorAlgoType algoType) const;
std::shared_ptr<AihdrEnhancerExtension> FindAihdrEnhancerExtension(const FrameInfo &inputInfo) const;
std::shared_ptr<DetailEnhancerExtension> FindDetailEnhancerExtension(uint32_t level) const;
std::shared_ptr<ContrastEnhancerExtension> FindContrastEnhancerExtension(ContrastEnhancerType type) const;
ExtensionList LoadExtensions() const;
VPEAlgoErrCode LoadStaticExtensions(ExtensionList& extensionList) const;
ExtensionList LoadStaticImageExtensions(
@@ -148,6 +152,8 @@ private:
AihdrEnhancerCapabilityMap& aihdrEnhancerCapabilityMap) const;
VPEAlgoErrCode BuildDetailEnhancerCaps(const std::shared_ptr<ExtensionBase>& ext, size_t idx,
DetailEnhancerCapabilityMap& detailEnhancerCapabilityMap) const;
VPEAlgoErrCode BuildContrastEnhancerCaps(const std::shared_ptr<ExtensionBase>& ext, size_t idx,
ContrastEnhancerCapabilityMap& contrastEnhancerCapabilityMap) const;
VPEAlgoErrCode ExtractColorSpaceConverterCap(const ColorSpaceConverterCapability& cap, size_t idx,
ColorSpaceConverterCapabilityMap& colorSpaceConverterCapabilityMap) const;
VPEAlgoErrCode ExtractMetadataGeneratorCap(const MetadataGeneratorCapability &cap, size_t idx,
@@ -19,7 +19,7 @@
namespace OHOS::Media::VideoProcessingEngine::Extension {
using RegisterExtensionFunc = void (*)(uintptr_t extensionListAddr);
const std::unordered_map<std::string, RegisterExtensionFunc> staticExtensionsRegisterMap = {
{ "Skia", RegisterSkiaExtensions },
{"Skia", RegisterSkiaExtensions},
};
} // namespace OHOS::Media::VideoProcessingEngine::Extension