mirror of
https://github.com/openharmony/multimedia_video_processing_engine.git
synced 2026-07-01 06:41:58 -04:00
!36 merge master into master
视频动态元数据生成新增支持nativebuffer输入 Created-by: Hennes Commit-by: Hennes Merged-by: openharmony_ci Description: ### 一、内容说明(相关的Issue) https://gitcode.com/openharmony/multimedia_video_processing_engine/issues/23 ### 二、建议测试周期和提测地址 不涉及 ### 三、变更内容 * 3.1 关联PR列表 无 * 3.2 数据库和部署说明 无 * 3.4 其他技术优化内容(做了什么,变更了什么) 视频动态元数据生成新增支持nativebuffer输入 * 3.5 废弃通知(什么字段、方法弃用?) 无 * 3.6 后向不兼容变更(是否有无法向后兼容的变更?) 无 ### 四、研发自测点(自测哪些?冒烟用例全部自测?) 自测测试结论:新增测试用例自测通过 ### 五、测试关注点(需要提醒QA重点关注的、可能会忽略的地方) 检查点: | 需求名称 | 是否影响xx公共模块 | 是否需要xx功能 | 需求升级是否依赖其他子产品 | |------|------------|----------|---------------| | 视频动态元数据生成新增支持nativebuffer输入 | 否 | 需要 | 不需要 | | | | | | 接口测试:接口测试 性能测试:不涉及 并发测试:不涉及 其他:不涉及 See merge request: openharmony/multimedia_video_processing_engine!36
This commit is contained in:
@@ -175,6 +175,36 @@ int32_t MetadataGeneratorProcessImage(int32_t instance, OHNativeWindowBuffer* in
|
||||
return ret;
|
||||
}
|
||||
|
||||
int32_t MetadataGeneratorProcessVideo(int32_t instance, OHNativeWindowBuffer* inputImage)
|
||||
{
|
||||
CHECK_AND_RETURN_RET_LOG((inputImage != nullptr), VPE_ALGO_ERR_INVALID_VAL,
|
||||
"invalid parameters");
|
||||
auto someInstance = Extension::ExtensionManager::GetInstance().GetInstance(instance);
|
||||
CHECK_AND_RETURN_RET_LOG(someInstance != std::nullopt, VPE_ALGO_ERR_INVALID_VAL, "invalid instance");
|
||||
|
||||
VPEAlgoErrCode ret = VPE_ALGO_ERR_INVALID_VAL;
|
||||
auto visitFunc = [inputImage, &ret](auto&& var) {
|
||||
using VarType = std::decay_t<decltype(var)>;
|
||||
if constexpr (std::is_same_v<VarType, std::shared_ptr<MetadataGenerator>>) {
|
||||
OH_NativeBuffer* inputImageNativeBuffer = nullptr;
|
||||
CHECK_AND_RETURN_LOG(
|
||||
(OH_NativeBuffer_FromNativeWindowBuffer(inputImage, &inputImageNativeBuffer) == GSERROR_OK),
|
||||
"invalid input image");
|
||||
sptr<SurfaceBuffer> inputImageSurfaceBuffer(
|
||||
SurfaceBuffer::NativeBufferToSurfaceBuffer(inputImageNativeBuffer));
|
||||
MetadataGeneratorParameter param;
|
||||
param.algoType = MetadataGeneratorAlgoType::META_GEN_ALGO_TYPE_VIDEO;
|
||||
(void)var->SetParameter(param);
|
||||
ret = var->Process(inputImageSurfaceBuffer);
|
||||
} else {
|
||||
VPE_LOGE("instance may be miss used");
|
||||
}
|
||||
};
|
||||
std::visit(visitFunc, *someInstance);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int32_t MetadataGeneratorDestroy(int32_t* instance)
|
||||
{
|
||||
CHECK_AND_RETURN_RET_LOG(instance != nullptr, VPE_ALGO_ERR_INVALID_VAL, "instance is null");
|
||||
|
||||
+1
-1
@@ -82,7 +82,7 @@ private:
|
||||
std::mutex mutex_;
|
||||
bool getUsage_{false};
|
||||
std::atomic<bool> initBuffer_{false};
|
||||
std::atomic<VideoMetadataGeneratorStyle> style_{VideoMetadataGeneratorStyle::META_GEN_BRIGHT_STYLE};
|
||||
std::atomic<VideoMetadataGeneratorStyle> style_{VideoMetadataGeneratorStyle::META_GEN_CONTRAST_STYLE};
|
||||
|
||||
// task相关
|
||||
std::mutex mtxTaskDone_;
|
||||
|
||||
@@ -150,7 +150,7 @@ struct MetadataGeneratorParameter {
|
||||
MetadataGeneratorAlgoType algoType = MetadataGeneratorAlgoType::META_GEN_ALGO_TYPE_IMAGE;
|
||||
bool isOldHdrVivid = false;
|
||||
float avgGainmapGray = 0.0;
|
||||
VideoMetadataGeneratorStyle styleType = VideoMetadataGeneratorStyle::META_GEN_BRIGHT_STYLE;
|
||||
VideoMetadataGeneratorStyle styleType = VideoMetadataGeneratorStyle::META_GEN_CONTRAST_STYLE;
|
||||
};
|
||||
|
||||
uint32_t GetColorSpaceType(const CM_ColorSpaceInfo &colorSpaceInfo);
|
||||
|
||||
@@ -71,6 +71,8 @@ extern "C" int32_t MetadataGeneratorCreate(int32_t* instance);
|
||||
|
||||
extern "C" int32_t MetadataGeneratorProcessImage(int32_t instance, OHNativeWindowBuffer* inputImage);
|
||||
|
||||
extern "C" int32_t MetadataGeneratorProcessVideo(int32_t instance, OHNativeWindowBuffer* inputImage);
|
||||
|
||||
extern "C" int32_t MetadataGeneratorDestroy(int32_t* instance);
|
||||
|
||||
} // namespace VideoProcessingEngine
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
"type": "variable"
|
||||
},
|
||||
{
|
||||
"first_introduced": "21",
|
||||
"first_introduced": "22",
|
||||
"name": "VIDEO_METADATA_GENERATOR_STYLE_CONTROL",
|
||||
"type": "variable"
|
||||
}
|
||||
|
||||
@@ -121,10 +121,7 @@ extern const char* VIDEO_DETAIL_ENHANCER_PARAMETER_KEY_QUALITY_LEVEL;
|
||||
* Use {@link OH_VideoProcessing_SetParameter} to set parameter into video processing instance.
|
||||
* Use {@link OH_VideoProcessing_GetParameter} to get the current mode.
|
||||
*
|
||||
* @see OH_AVFormat_SetIntValue
|
||||
* @see OH_VideoProcessing_SetParameter
|
||||
* @see OH_VideoProcessing_GetParameter
|
||||
* @since 21
|
||||
* @since 22
|
||||
*/
|
||||
extern const char* VIDEO_METADATA_GENERATOR_STYLE_CONTROL;
|
||||
|
||||
@@ -171,7 +168,7 @@ typedef enum VideoDetailEnhancer_QualityLevel {
|
||||
* @see OH_AVFormat_SetIntValue
|
||||
* @see OH_VideoProcessing_SetParameter
|
||||
* @see OH_VideoProcessing_GetParameter
|
||||
* @since 21
|
||||
* @since 22
|
||||
*/
|
||||
typedef enum VideoMetadataGeneratorStyleControl {
|
||||
/** Style Control into bright mode */
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include "native_avformat.h"
|
||||
#include "pixelmap_native.h"
|
||||
#include "image_processing_factory.h"
|
||||
#include "metadata_generator.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace testing::ext;
|
||||
@@ -364,6 +365,59 @@ HWTEST_F(ImageProcessingUnitTest, process_10, TestSize.Level1)
|
||||
EXPECT_EQ(ret, IMAGE_PROCESSING_SUCCESS);
|
||||
OH_ImageProcessing_DeinitializeEnvironment();
|
||||
}
|
||||
|
||||
HWTEST_F(ImageProcessingUnitTest, apitest_01, TestSize.Level1)
|
||||
{
|
||||
int32_t instanceSrId = -1;
|
||||
int32_t* tmp = &instanceSrId;
|
||||
auto ret = MetadataGeneratorCreate(tmp);
|
||||
EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
|
||||
EXPECT_NE(instanceSrId, (int32_t)(-1));
|
||||
auto input = CreateSurfaceBuffer(GRAPHIC_PIXEL_FMT_RGBA_1010102, 1920, 1080);
|
||||
EXPECT_NE(input, nullptr);
|
||||
OHNativeWindowBuffer* srTmp = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&input);
|
||||
EXPECT_NE(srTmp, nullptr);
|
||||
OH_NativeBuffer* inputImageNativeBuffer = nullptr;
|
||||
OH_NativeBuffer_FromNativeWindowBuffer(srTmp, &inputImageNativeBuffer);
|
||||
EXPECT_NE(inputImageNativeBuffer, nullptr);
|
||||
uint8_t metadataType = CM_IMAGE_HDR_VIVID_DUAL;
|
||||
OH_NativeBuffer_SetMetadataValue(inputImageNativeBuffer, OH_HDR_METADATA_TYPE, sizeof(uint8_t), &metadataType);
|
||||
OH_NativeBuffer_ColorSpace colorSpace = OH_COLORSPACE_BT2020_HLG_LIMIT;
|
||||
OH_NativeBuffer_SetColorSpace(inputImageNativeBuffer, colorSpace);
|
||||
OHNativeWindowBuffer* srIn = OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer(inputImageNativeBuffer);
|
||||
EXPECT_NE(srIn, nullptr);
|
||||
ret = MetadataGeneratorProcessImage(instanceSrId, srIn);
|
||||
EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
|
||||
ret = MetadataGeneratorDestroy(tmp);
|
||||
EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
|
||||
}
|
||||
|
||||
HWTEST_F(ImageProcessingUnitTest, apitest_02, TestSize.Level1)
|
||||
{
|
||||
int32_t instanceSrId = -1;
|
||||
int32_t* tmp = &instanceSrId;
|
||||
auto ret = MetadataGeneratorCreate(tmp);
|
||||
EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
|
||||
EXPECT_NE(instanceSrId, (int32_t)(-1));
|
||||
auto input = CreateSurfaceBuffer(GRAPHIC_PIXEL_FMT_RGBA_1010102, 1920, 1080);
|
||||
EXPECT_NE(input, nullptr);
|
||||
OHNativeWindowBuffer* srTmp = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&input);
|
||||
EXPECT_NE(srTmp, nullptr);
|
||||
OH_NativeBuffer* inputVideoNativeBuffer = nullptr;
|
||||
OH_NativeBuffer_FromNativeWindowBuffer(srTmp, &inputVideoNativeBuffer);
|
||||
EXPECT_NE(inputVideoNativeBuffer, nullptr);
|
||||
uint8_t metadataType = OH_VIDEO_HDR_HLG;
|
||||
OH_NativeBuffer_SetMetadataValue(inputVideoNativeBuffer, OH_HDR_METADATA_TYPE, sizeof(uint8_t), &metadataType);
|
||||
OH_NativeBuffer_ColorSpace colorSpace = OH_COLORSPACE_BT2020_HLG_LIMIT;
|
||||
OH_NativeBuffer_SetColorSpace(inputVideoNativeBuffer, colorSpace);
|
||||
OHNativeWindowBuffer* srIn = OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer(inputVideoNativeBuffer);
|
||||
EXPECT_NE(srIn, nullptr);
|
||||
ret = MetadataGeneratorProcessVideo(instanceSrId, srIn);
|
||||
EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
|
||||
ret = MetadataGeneratorDestroy(tmp);
|
||||
EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
|
||||
}
|
||||
|
||||
} // namespace VideoProcessingEngine
|
||||
} // namespace Media
|
||||
} // namespace OHOS
|
||||
|
||||
Reference in New Issue
Block a user