mirror of
https://github.com/openharmony/multimedia_video_processing_engine.git
synced 2026-07-01 06:41:58 -04:00
!42 merge master into master
fix potential invalid address Created-by: pxh123456 Commit-by: pxh123456 Merged-by: openharmony_ci Description: ### 一、内容说明(相关的Issue) 解决局部指针传到函数外导致的内存风险 https://gitcode.com/openharmony/multimedia_video_processing_engine/issues/26 ### 二、建议测试周期和提测地址 建议测试完成时间:2025.11.24 投产上线时间:2025.11.24 提测地址:CI环境/压测环境 测试账号: ### 三、变更内容 * 3.1 关联PR列表 无i * 3.2 数据库和部署说明 1常规更新 * 3.4 其他技术优化内容(做了什么,变更了什么) 无 * 3.5 废弃通知(什么字段、方法弃用?) 不涉及 * 3.6 后向不兼容变更(是否有无法向后兼容的变更?) 不涉及 ### 四、研发自测点(自测哪些?冒烟用例全部自测?) 自测测试结论:稳定无异常 ### 五、测试关注点(需要提醒QA重点关注的、可能会忽略的地方) 检查点:是否出现稳定性问题 | 需求名称 | 是否影响vpe公共模块 | 是否需要vpe功能 | 需求升级是否依赖其他子产品 | |------|------------|----------|---------------| | xxx | 否 | 不需要 | 不需要 | | | | | | 接口测试:功能可用 性能测试:无性能劣化 并发测试:无稳定性问题 其他: See merge request: openharmony/multimedia_video_processing_engine!42
This commit is contained in:
@@ -86,14 +86,15 @@ void VpeNapi::ThrowExceptionError(napi_env env, const int32_t errCode, const std
|
||||
napi_throw_error(env, errCodeStr.c_str(), errMsg.c_str());
|
||||
}
|
||||
|
||||
bool VpeNapi::PrepareNapiEnv(napi_env env, napi_callback_info info, NapiValues* nVal)
|
||||
bool VpeNapi::PrepareNapiEnv(napi_env env, napi_callback_info info, NapiValues* nVal, napi_value* argValue)
|
||||
{
|
||||
CHECK_AND_RETURN_RET_LOG(nVal != nullptr, false, "nVal == nullptr");
|
||||
CHECK_AND_RETURN_RET_LOG(argValue != nullptr, false, "argValue == nullptr");
|
||||
if (napi_get_undefined(env, &(nVal->result)) != napi_ok) {
|
||||
VPE_LOGE("Get undefined result failed");
|
||||
return false;
|
||||
}
|
||||
nVal->status = napi_get_cb_info(env, info, &(nVal->argc), nVal->argv, &(nVal->thisVar), nullptr);
|
||||
nVal->status = napi_get_cb_info(env, info, &(nVal->argc), argValue, &(nVal->thisVar), nullptr);
|
||||
if (nVal->status != napi_ok) {
|
||||
VPE_LOGE("fail to napi_get_cb_info");
|
||||
return false;
|
||||
@@ -155,8 +156,7 @@ bool VpeNapi::ParseDetailEnhanceParameter(napi_env env, napi_callback_info info)
|
||||
NapiValues nVal;
|
||||
nVal.argc = NUM_4; // Use the maximum value to initialize argc before executing PrepareNapiEnv
|
||||
napi_value argValue[NUM_4] = {0};
|
||||
nVal.argv = argValue;
|
||||
CHECK_AND_RETURN_RET_LOG(PrepareNapiEnv(env, info, &nVal), false, "PrepareNapiEnv failed");
|
||||
CHECK_AND_RETURN_RET_LOG(PrepareNapiEnv(env, info, &nVal, argValue), false, "PrepareNapiEnv failed");
|
||||
if (nVal.argc != NUM_2 && nVal.argc != NUM_3 && nVal.argc != NUM_4) {
|
||||
VPE_LOGE("Invalid args count %{public}zu", nVal.argc);
|
||||
return false;
|
||||
@@ -169,28 +169,28 @@ bool VpeNapi::ParseDetailEnhanceParameter(napi_env env, napi_callback_info info)
|
||||
}
|
||||
CHECK_AND_RETURN_RET_LOG(detailContext_->inputPixelMap != nullptr, false, "inputPixelMap is nullptr!");
|
||||
if (nVal.argc == NUM_2) { // 2 parameter: pixelmap scaleRatio
|
||||
CHECK_AND_RETURN_RET_LOG(ConfigResolutionBasedOnRatio(env, nVal.argv[NUM_1], detailContext_),
|
||||
CHECK_AND_RETURN_RET_LOG(ConfigResolutionBasedOnRatio(env, argValue[NUM_1], detailContext_),
|
||||
false, "ConfigResolutionBasedOnRatio failed");
|
||||
detailContext_->qualityLevel = DETAIL_ENH_LEVEL_LOW; // default as low level
|
||||
}
|
||||
if (nVal.argc == NUM_3) { // 3 parameter: pixelmap scaleRatio level / pixelmap x y
|
||||
double valueToCheck = 0;
|
||||
CHECK_AND_RETURN_RET_LOG(napi_get_value_double(env, nVal.argv[NUM_2], &valueToCheck) == napi_ok,
|
||||
CHECK_AND_RETURN_RET_LOG(napi_get_value_double(env, argValue[NUM_2], &valueToCheck) == napi_ok,
|
||||
false, "failed to parse");
|
||||
if (valueToCheck >= 0 && valueToCheck <= 3) { // if valueToCheck in [0,3], valueToCheck should be level.
|
||||
CHECK_AND_RETURN_RET_LOG(ConfigResolutionBasedOnRatio(env, nVal.argv[NUM_1], detailContext_), false,
|
||||
CHECK_AND_RETURN_RET_LOG(ConfigResolutionBasedOnRatio(env, argValue[NUM_1], detailContext_), false,
|
||||
"ConfigResolutionBasedOnRatio failed");
|
||||
detailContext_->qualityLevel = static_cast<int>(valueToCheck);
|
||||
} else {
|
||||
CHECK_AND_RETURN_RET_LOG(ConfigResolution(env, nVal.argv[NUM_1], nVal.argv[NUM_2], detailContext_),
|
||||
CHECK_AND_RETURN_RET_LOG(ConfigResolution(env, argValue[NUM_1], argValue[NUM_2], detailContext_),
|
||||
false, "ConfigResolution failed");
|
||||
detailContext_->qualityLevel = DETAIL_ENH_LEVEL_LOW; // default as low level
|
||||
}
|
||||
}
|
||||
if (nVal.argc == NUM_4) { // 4 parameter: pixelmap x y level
|
||||
CHECK_AND_RETURN_RET_LOG(ConfigResolution(env, nVal.argv[NUM_1], nVal.argv[NUM_2], detailContext_),
|
||||
CHECK_AND_RETURN_RET_LOG(ConfigResolution(env, argValue[NUM_1], argValue[NUM_2], detailContext_),
|
||||
false, "ConfigResolution failed");
|
||||
CHECK_AND_RETURN_RET_LOG(napi_get_value_int32(env, nVal.argv[NUM_3],
|
||||
CHECK_AND_RETURN_RET_LOG(napi_get_value_int32(env, argValue[NUM_3],
|
||||
&(detailContext_->qualityLevel)) == napi_ok, false, "Arg 3 type mismatch");
|
||||
}
|
||||
return true;
|
||||
@@ -679,8 +679,7 @@ bool VpeNapi::ParseDetailImageParameter(napi_env env, napi_callback_info info, N
|
||||
std::lock_guard<std::mutex> lock(g_contrastLock);
|
||||
nVal.argc = NUM_9;
|
||||
napi_value argValue[NUM_9] = {0};
|
||||
nVal.argv = argValue;
|
||||
if (!PrepareNapiEnv(env, info, &nVal)) {
|
||||
if (!PrepareNapiEnv(env, info, &nVal, argValue)) {
|
||||
return false;
|
||||
}
|
||||
if (nVal.argc != NUM_9) {
|
||||
@@ -692,20 +691,20 @@ bool VpeNapi::ParseDetailImageParameter(napi_env env, napi_callback_info info, N
|
||||
contrastContext_->inputPixelMap = PixelMapNapi::GetPixelMap(env, argValue[NUM_0]);
|
||||
CHECK_AND_RETURN_RET_LOG(contrastContext_->inputPixelMap != nullptr, false,
|
||||
"contrastContext_->srcPixelMap == nullptr, resuse history");
|
||||
CHECK_AND_RETURN_RET_LOG(napi_get_value_int32(env, nVal.argv[NUM_1],
|
||||
CHECK_AND_RETURN_RET_LOG(napi_get_value_int32(env, argValue[NUM_1],
|
||||
&(contrastContext_->pixelmapId)) == napi_ok, false, "Arg 1 type mismatch");
|
||||
CHECK_AND_RETURN_RET_LOG(ParseRect(env, argValue[NUM_2], contrastContext_->curPixelmapArea), false,
|
||||
"parse pixelmap area failed");
|
||||
CHECK_AND_RETURN_RET_LOG(ParseRect(env, argValue[NUM_3], contrastContext_->displayArea), false,
|
||||
"parse display area failed");
|
||||
CHECK_AND_RETURN_RET_LOG(ParseSize(env, argValue[NUM_4]), false, "parse resolution of original image failed");
|
||||
CHECK_AND_RETURN_RET_LOG(napi_get_value_bool(env, nVal.argv[NUM_5],
|
||||
CHECK_AND_RETURN_RET_LOG(napi_get_value_bool(env, argValue[NUM_5],
|
||||
&(contrastContext_->genFinalEffect)) == napi_ok, false, "Arg 5 type mismatch");
|
||||
CHECK_AND_RETURN_RET_LOG(napi_get_value_double(env, nVal.argv[NUM_6],
|
||||
CHECK_AND_RETURN_RET_LOG(napi_get_value_double(env, argValue[NUM_6],
|
||||
&(contrastContext_->maxRatio)) == napi_ok, false, "Arg 6 type mismatch");
|
||||
CHECK_AND_RETURN_RET_LOG(napi_get_value_int32(env, nVal.argv[NUM_7],
|
||||
CHECK_AND_RETURN_RET_LOG(napi_get_value_int32(env, argValue[NUM_7],
|
||||
&(contrastContext_->animationDuration)) == napi_ok, false, "Arg 7 type mismatch");
|
||||
CHECK_AND_RETURN_RET_LOG(napi_get_value_double(env, nVal.argv[NUM_8],
|
||||
CHECK_AND_RETURN_RET_LOG(napi_get_value_double(env, argValue[NUM_8],
|
||||
&(contrastContext_->curRatio)) == napi_ok, false, "Arg 8 type mismatch");
|
||||
}
|
||||
contrastContext_->fullRatio = std::min(
|
||||
@@ -727,8 +726,7 @@ bool VpeNapi::ParseLCDParameter(napi_env env, napi_callback_info info, NapiValue
|
||||
std::lock_guard<std::mutex> lock(g_contrastLock);
|
||||
nVal.argc = NUM_3;
|
||||
napi_value argValue[NUM_3] = {0};
|
||||
nVal.argv = argValue;
|
||||
if (!PrepareNapiEnv(env, info, &nVal)) {
|
||||
if (!PrepareNapiEnv(env, info, &nVal, argValue)) {
|
||||
return false;
|
||||
}
|
||||
if (nVal.argc != NUM_3) {
|
||||
@@ -739,9 +737,9 @@ bool VpeNapi::ParseLCDParameter(napi_env env, napi_callback_info info, NapiValue
|
||||
false, "Arg 0 type is not pixelmap");
|
||||
contrastContext_->lcdPixelMap = PixelMapNapi::GetPixelMap(env, argValue[NUM_0]);
|
||||
CHECK_AND_RETURN_RET_LOG(contrastContext_->lcdPixelMap != nullptr, false, "pixelmap is nullptr");
|
||||
CHECK_AND_RETURN_RET_LOG(napi_get_value_int32(env, nVal.argv[NUM_1],
|
||||
CHECK_AND_RETURN_RET_LOG(napi_get_value_int32(env, argValue[NUM_1],
|
||||
&(contrastContext_->contentId)) == napi_ok, false, "Failed to parse lcd param. Arg 1 type mismatch");
|
||||
CHECK_AND_RETURN_RET_LOG(napi_get_value_double(env, nVal.argv[NUM_2],
|
||||
CHECK_AND_RETURN_RET_LOG(napi_get_value_double(env, argValue[NUM_2],
|
||||
&(contrastContext_->defaultRatio)) == napi_ok, false, "Failed to parse lcd param. Arg 2 type mismatch");
|
||||
CHECK_AND_RETURN_RET_LOG(contrastContext_->lcdPixelMap->GetWidth() > 0 &&
|
||||
contrastContext_->lcdPixelMap->GetHeight() > 0, false, "invalid resolution");
|
||||
|
||||
@@ -92,7 +92,7 @@ private:
|
||||
static thread_local std::shared_ptr<ContrastEnhanceContext> contrastContext_;
|
||||
static thread_local std::shared_ptr<DetailEnhanceContext> detailContext_;
|
||||
|
||||
static bool PrepareNapiEnv(napi_env env, napi_callback_info info, NapiValues* nVal);
|
||||
static bool PrepareNapiEnv(napi_env env, napi_callback_info info, NapiValues* nVal, napi_value* argValue);
|
||||
static bool ParseRect(napi_env env, napi_value nVal, OHOS::Rect& rect);
|
||||
static bool ParseSize(napi_env env, napi_value nVal);
|
||||
static std::shared_ptr<PixelMap> PrepareDstPixelMap(napi_env env, VpeNapi::DetailEnhanceContext* context);
|
||||
|
||||
Reference in New Issue
Block a user