From a108205ee61d2f4a7b2237f8824375d9e361dc25 Mon Sep 17 00:00:00 2001 From: cenfarm Date: Wed, 16 Apr 2025 17:00:19 +0800 Subject: [PATCH 1/2] convert rgba to yuv when user gpu Signed-off-by: cenfarm --- .../colorspace_manager/colorspace_helper.cpp | 9 ++- .../filters/sink/image_sink_filter.cpp | 20 ++--- frameworks/native/efilter/base/efilter.cpp | 6 +- .../render_environment/render_environment.cpp | 10 ++- .../native/utils/common/common_utils.cpp | 74 ++++++++++++++++++- .../native/colorspace/colorspace_helper.h | 5 +- 6 files changed, 100 insertions(+), 24 deletions(-) diff --git a/frameworks/native/effect/manager/colorspace_manager/colorspace_helper.cpp b/frameworks/native/effect/manager/colorspace_manager/colorspace_helper.cpp index aeea7ad..47db8a5 100644 --- a/frameworks/native/effect/manager/colorspace_manager/colorspace_helper.cpp +++ b/frameworks/native/effect/manager/colorspace_manager/colorspace_helper.cpp @@ -195,15 +195,16 @@ ErrorCode ColorSpaceHelper::SetHDRStaticMetadata(SurfaceBuffer *sb, const std::v return ErrorCode::SUCCESS; } -ErrorCode ColorSpaceHelper::UpdateMetadata(EffectBuffer *input) +ErrorCode ColorSpaceHelper::UpdateMetadata(EffectBuffer *input, const std::shared_ptr &context) { CHECK_AND_RETURN_RET_LOG(input != nullptr && input->bufferInfo_ != nullptr && input->extraInfo_ != nullptr, ErrorCode::ERR_INPUT_NULL, "UpdateMetadata: inputBuffer is null"); - return UpdateMetadata(input->bufferInfo_->surfaceBuffer_, input->bufferInfo_->colorSpace_); + return UpdateMetadata(input->bufferInfo_->surfaceBuffer_, input->bufferInfo_->colorSpace_, context); } -ErrorCode ColorSpaceHelper::UpdateMetadata(SurfaceBuffer *input, const EffectColorSpace &colorSpace) +ErrorCode ColorSpaceHelper::UpdateMetadata(SurfaceBuffer *input, const EffectColorSpace &colorSpace, + const std::shared_ptr &context) { EFFECT_LOGD("UpdateMetadata: colorSpace=%{public}d}", colorSpace); if (input == nullptr || !ColorSpaceHelper::IsHdrColorSpace(colorSpace)) { @@ -332,4 +333,4 @@ ErrorCode ColorSpaceHelper::ConvertColorSpace(std::shared_ptr &src } } // namespace Effect } // namespace Media -} // namespace OHOS \ No newline at end of file +} // namespace OHOS diff --git a/frameworks/native/effect/pipeline/filters/sink/image_sink_filter.cpp b/frameworks/native/effect/pipeline/filters/sink/image_sink_filter.cpp index 1e9e2dd..62966c2 100644 --- a/frameworks/native/effect/pipeline/filters/sink/image_sink_filter.cpp +++ b/frameworks/native/effect/pipeline/filters/sink/image_sink_filter.cpp @@ -95,7 +95,7 @@ ErrorCode ModifyPixelMap(EffectBuffer *src, const std::shared_ptr EFFECT_LOGD("ModifyPixelMap: not need modify pixelmap!"); CommonUtils::UpdateImageExifDateTime(pixelMap); CHECK_AND_RETURN_RET(context->metaInfoNegotiate_->IsNeedUpdate() != true, ErrorCode::SUCCESS); - return ColorSpaceHelper::UpdateMetadata(src); + return ColorSpaceHelper::UpdateMetadata(src, context); } if (buffer->extraInfo_->dataType == DataType::TEX) { @@ -104,7 +104,7 @@ ErrorCode ModifyPixelMap(EffectBuffer *src, const std::shared_ptr context->renderEnvironment_->ConvertTextureToBuffer(buffer->tex, src); CommonUtils::UpdateImageExifDateTime(pixelMap); CHECK_AND_RETURN_RET(context->metaInfoNegotiate_->IsNeedUpdate() != true, ErrorCode::SUCCESS); - return ColorSpaceHelper::UpdateMetadata(src); + return ColorSpaceHelper::UpdateMetadata(src, context); } else { return CommonUtils::ModifyPixelMapPropertyForTexture(pixelMap, buffer, context); } @@ -116,7 +116,7 @@ ErrorCode ModifyPixelMap(EffectBuffer *src, const std::shared_ptr EFFECT_LOGD("Copy data to pixel map."); CopyDataToPixelMap(pixelMap, buffer); CHECK_AND_RETURN_RET(context->metaInfoNegotiate_->IsNeedUpdate() != true, ErrorCode::SUCCESS); - return ColorSpaceHelper::UpdateMetadata(buffer.get()); + return ColorSpaceHelper::UpdateMetadata(buffer.get(), context); } ErrorCode result = CommonUtils::ModifyPixelMapProperty(pixelMap, buffer, context->memoryManager_); @@ -148,7 +148,7 @@ ErrorCode ModifySurfaceBuffer(EffectBuffer *src, const std::shared_ptrGetVirAddr(), buffer->buffer_); if (surfaceBuffer->GetVirAddr() == buffer->buffer_) { CHECK_AND_RETURN_RET(context->metaInfoNegotiate_->IsNeedUpdate() != true, ErrorCode::SUCCESS); - return ColorSpaceHelper::UpdateMetadata(buffer.get()); + return ColorSpaceHelper::UpdateMetadata(buffer.get(), context); } if (buffer->extraInfo_->dataType == DataType::TEX) { @@ -156,7 +156,7 @@ ErrorCode ModifySurfaceBuffer(EffectBuffer *src, const std::shared_ptrGetHeight() == static_cast(buffer->bufferInfo_->height_)) { context->renderEnvironment_->ConvertTextureToBuffer(buffer->tex, src); CHECK_AND_RETURN_RET(context->metaInfoNegotiate_->IsNeedUpdate() != true, ErrorCode::SUCCESS); - return ColorSpaceHelper::UpdateMetadata(src); + return ColorSpaceHelper::UpdateMetadata(src, context); } return ErrorCode::ERR_BUFFER_NOT_ALLOW_CHANGE; } @@ -168,7 +168,7 @@ ErrorCode ModifySurfaceBuffer(EffectBuffer *src, const std::shared_ptrmetaInfoNegotiate_->IsNeedUpdate() != true, ErrorCode::SUCCESS); - return ColorSpaceHelper::UpdateMetadata(buffer.get()); + return ColorSpaceHelper::UpdateMetadata(buffer.get(), context); } EFFECT_LOGE("surface buffer not allow changed!"); @@ -189,7 +189,7 @@ ErrorCode ModifyInnerPicture(EffectBuffer *src, const std::shared_ptrmetaInfoNegotiate_->IsNeedUpdate() != true, ErrorCode::SUCCESS); - return ColorSpaceHelper::UpdateMetadata(buffer.get()); + return ColorSpaceHelper::UpdateMetadata(buffer.get(), context); } // update picture exif @@ -242,7 +242,7 @@ ErrorCode ModifyPictureForGainMap(PixelMap *gainMapPixelMap, EffectBuffer *src, if (gainMapPixelMap->GetWidth() == static_cast(gainMapBuffer->bufferInfo_->width_) && gainMapPixelMap->GetHeight() == static_cast(gainMapBuffer->bufferInfo_->height_)) { context->renderEnvironment_->ConvertTextureToBuffer(gainMapBuffer->tex, srcGainMapBuffer.get()); - return ColorSpaceHelper::UpdateMetadata(src); + return ColorSpaceHelper::UpdateMetadata(src, context); } else { EFFECT_LOGD("ModifyPicture: ModifyPixelMapPropertyForTexture"); return CommonUtils::ModifyPixelMapPropertyForTexture(gainMapPixelMap, gainMapBuffer, context); @@ -429,7 +429,7 @@ ErrorCode FillOutputData(const std::shared_ptr &inputBuffer, std:: // update metadata CHECK_AND_RETURN_RET(context->metaInfoNegotiate_->IsNeedUpdate() != true, ErrorCode::SUCCESS); - return ColorSpaceHelper::UpdateMetadata(outputBuffer.get()); + return ColorSpaceHelper::UpdateMetadata(outputBuffer.get(), context); } size_t outputBufferSize = outputBuffer->bufferInfo_->len_; @@ -451,7 +451,7 @@ ErrorCode FillOutputData(const std::shared_ptr &inputBuffer, std:: // update metadata CHECK_AND_RETURN_RET(context->metaInfoNegotiate_->IsNeedUpdate() != true, ErrorCode::SUCCESS); - return ColorSpaceHelper::UpdateMetadata(outputBuffer.get()); + return ColorSpaceHelper::UpdateMetadata(outputBuffer.get(), context); } ErrorCode FillPictureMainPixel(const std::shared_ptr &inputBuffer, diff --git a/frameworks/native/efilter/base/efilter.cpp b/frameworks/native/efilter/base/efilter.cpp index cbb1617..6390bc6 100644 --- a/frameworks/native/efilter/base/efilter.cpp +++ b/frameworks/native/efilter/base/efilter.cpp @@ -468,7 +468,7 @@ ErrorCode OnPushDataPortsEmpty(std::shared_ptr &buffer, std::share // efilter modify input buffer directly if (input->buffer_ == buffer->buffer_) { - return ColorSpaceHelper::UpdateMetadata(buffer.get()); + return ColorSpaceHelper::UpdateMetadata(buffer.get(), context); } // efilter create new buffer and inout with the same buffer. @@ -697,7 +697,7 @@ ErrorCode EFilter::RenderInner(std::shared_ptr &src, std::shared_p "Render CreateDmaEffectBuffer dst fail! res=%{public}d, name=%{public}s", res, name_.c_str()); res = Render(input == nullptr ? srcBuf : input.get(), output == nullptr ? dstBuf : output.get(), context); CHECK_AND_RETURN_RET_LOG(res == ErrorCode::SUCCESS, res, "Render: render with input and output fail!"); - res = ColorSpaceHelper::UpdateMetadata(output == nullptr ? dst.get() : output.get()); + res = ColorSpaceHelper::UpdateMetadata(output == nullptr ? dst.get() : output.get(), context); CHECK_AND_RETURN_RET_LOG(res == ErrorCode::SUCCESS, res, "OnPushDataPortsEmpty: UpdateMetadata fail!"); if (output != nullptr) { MemcpyHelper::CopyData(output.get(), dstBuf); @@ -762,4 +762,4 @@ ErrorCode EFilter::CancelCache() } // namespace Effect } // namespace Media -} // namespace OHOS \ No newline at end of file +} // namespace OHOS diff --git a/frameworks/native/render_environment/render_environment.cpp b/frameworks/native/render_environment/render_environment.cpp index 8589558..ede015b 100644 --- a/frameworks/native/render_environment/render_environment.cpp +++ b/frameworks/native/render_environment/render_environment.cpp @@ -260,6 +260,14 @@ void RenderEnvironment::GenTex(const std::shared_ptr &source, std: output->tex = GenMainTex(source, false); break; } + + output->bufferInfo_->formatType_ = output->tex->Format() == GL_RGBA8 ? + IEffectFormat::RGBA8888 : IEffectFormat::RGBA_1010102; + + output->bufferInfo_->rowStride_ = FormatHelper::CalculateRowStride(output->bufferInfo_->width_, + output->bufferInfo_->formatType_); + output->bufferInfo_->len_ = FormatHelper::CalculateSize(output->bufferInfo_->width_, + output->bufferInfo_->height_, output->bufferInfo_->formatType_); } void RenderEnvironment::DrawFlipTex(RenderTexturePtr input, RenderTexturePtr output) @@ -772,4 +780,4 @@ void RenderEnvironment::ReleaseParam() } } // namespace Effect } // namespace Media -} // namespace OHOS \ No newline at end of file +} // namespace OHOS diff --git a/frameworks/native/utils/common/common_utils.cpp b/frameworks/native/utils/common/common_utils.cpp index 422f962..7eeaaf8 100644 --- a/frameworks/native/utils/common/common_utils.cpp +++ b/frameworks/native/utils/common/common_utils.cpp @@ -803,7 +803,7 @@ ErrorCode ModifyYUVInfo(PixelMap *pixelMap, void *context, const MemoryInfo &mem } ErrorCode ModifyPixelMapPropertyInner(std::shared_ptr &memoryData, PixelMap *pixelMap, - AllocatorType &allocatorType, bool isUpdateExif) + AllocatorType &allocatorType, bool isUpdateExif, const std::shared_ptr &effectContext) { void *context = nullptr; const MemoryInfo &memoryInfo = memoryData->memoryInfo; @@ -853,8 +853,9 @@ ErrorCode ModifyPixelMapPropertyInner(std::shared_ptr &memoryData, P // update colorspace if need if (memoryInfo.bufferType == BufferType::DMA_BUFFER) { + EFFECT_LOGD("ModifyPixcelMapPropertyInner: update colorspace"); res = ColorSpaceHelper::UpdateMetadata(static_cast(memoryInfo.extra), - memoryInfo.bufferInfo.colorSpace_); + memoryInfo.bufferInfo.colorSpace_, effectContext); CHECK_AND_RETURN_RET_LOG(res == ErrorCode::SUCCESS, res, "ModifyPixelMapPropertyInner: UpdateMetadata fail! res=%{public}d", res); } @@ -899,6 +900,56 @@ ErrorCode CommonUtils::ModifyPixelMapProperty(PixelMap *pixelMap, const std::sha return ModifyPixelMapPropertyInner(memoryData, pixelMap, allocatorType, isUpdateExif); } +ErrorCode ConvertRgba2Yuv(EffectBuffer *rgba, EffectBuffer *yuv) +{ + CHECK_AND_RETURN_RET_LOG(rgba != nullptr && yuv != nullptr, ErrorCode::ERR_INPUT_NULL, + "ConvertRgba2Yuv: input error! rgba=%{public}d, yuv =%{public}d", rgba == nullptr, yuv == nullptr); + FormatConverterInfo rgbaFormatInfo = { + .bufferInfo = *rgba->bufferInfo_, + .buffer = rgba->buffer_, + }; + FormatConverterInfo yuvFormatInfo = { + .bufferInfo = *yuv->bufferInfo_, + .buffer = yuv->buffer_, + }; + + return FormatHelper::ConvertFormat(rgbaFormatInfo, yuvFormatInfo); +} + +ErrorCode CopyEffectBufferFromSrc(const BufferType &bufferType, std::unique_ptr &memory, + std::shared_ptr &memoryData, std::shared_ptr &effectBuffer, + const std::shared_ptr &context) +{ + EffectBuffer* src = context->renderStrategy_->GetInput(); + MemoryInfo yuvMemInfo = { + .isAutoRelease = false, + .bufferInfo = { + .width_ = src->bufferInfo_->width_, + .height_ = src->bufferInfo_->height_, + .len_ = FormatHelper::CalculateSize(src->bufferInfo_->width_, src->bufferInfo_->height_, + src->bufferInfo_->formatType_), + .formatType_ = src->bufferInfo_->formatType_, + .rowStride_ = FormatHelper::CalculateRowStride(src->bufferInfo_->width_, src->bufferInfo_->formatType_), + }, + .bufferType = bufferType, + }; + memoryData = memory->Alloc(yuvMemInfo); + CHECK_AND_RETURN_RET_LOG(memoryData != nullptr, ErrorCode::ERR_ALLOC_MEMORY_FAIL, "Alloc yuv memory fail!"); + + MemoryInfo& allocMemInfo = memoryData->memoryInfo; + auto yuvBufferInfo = std::make_shared(); + CommonUtils::CopyBufferInfo(allocMemInfo.bufferInfo, *yuvBufferInfo); + yuvBufferInfo->surfaceBuffer_ = static_cast(allocMemInfo.extra); + yuvBufferInfo->xtStyleMetadata = src->bufferInfo_->xtStyleMetadata; + yuvBufferInfo->rfDataBMetadata = src->bufferInfo_->rfDataBMetadata; + auto extraInfo = std::make_shared(); + CommonUtils::CopyExtraInfo(*(src->extraInfo_), *extraInfo); + extraInfo->bufferType = allocMemInfo.bufferType; + + effectBuffer = std::make_shared(yuvBufferInfo, memoryData->data, extraInfo); + return ErrorCode::SUCCESS; +} + ErrorCode CommonUtils::ModifyPixelMapPropertyForTexture(PixelMap *pixelMap, const std::shared_ptr &buffer, const std::shared_ptr &context, bool isUpdateExif) { @@ -921,7 +972,22 @@ ErrorCode CommonUtils::ModifyPixelMapPropertyForTexture(PixelMap *pixelMap, cons context->renderEnvironment_->ReadPixelsFromTex(buffer->tex, memoryData->data, buffer->bufferInfo_->width_, buffer->bufferInfo_->height_, memoryData->memoryInfo.bufferInfo.rowStride_ / RGBA_BYTES_PER_PIXEL); - return ModifyPixelMapPropertyInner(memoryData, pixelMap, allocatorType, isUpdateExif); + EffectBuffer* src = context->renderStrategy_->GetInput(); + IEffectFormat srcEffectFormat = src->bufferInfo_->formatType_; + if (srcEffectFormat != buffer->bufferInfo_->formatType_ && (srcEffectFormat == IEffectFormat::YUVNV21 || + srcEffectFormat == IEffectFormat::YUVNV12)) { + EFFECT_LOGI("ModifyPixelMapProperty: Convert to yuv, buffer formatType_=%{public}d, src formatType_=%{public}d", + buffer->bufferInfo_->formatType_, srcEffectFormat); + std::shared_ptr yuvEffectBuffer; + std::shared_ptr yuvMemoryData; + CopyEffectBufferFromSrc(bufferType, memory, yuvMemoryData, yuvEffectBuffer, context); + + auto effectBuffer = std::make_shared(buffer->bufferInfo_, memoryData->data, buffer->extraInfo_); + ConvertRgba2Yuv(effectBuffer.get(), yuvEffectBuffer.get()); + return ModifyPixelMapPropertyInner(yuvMemoryData, pixelMap, allocatorType, isUpdateExif, context); + } + + return ModifyPixelMapPropertyInner(memoryData, pixelMap, allocatorType, isUpdateExif, context); } std::shared_ptr CommonUtils::GetImageSourceFromPath(const std::string path) @@ -936,4 +1002,4 @@ std::shared_ptr CommonUtils::GetImageSourceFromPath(const std::stri } } // namespace Effect } // namespace Media -} // namespace OHOS \ No newline at end of file +} // namespace OHOS diff --git a/interfaces/inner_api/native/colorspace/colorspace_helper.h b/interfaces/inner_api/native/colorspace/colorspace_helper.h index aa07361..3da779f 100644 --- a/interfaces/inner_api/native/colorspace/colorspace_helper.h +++ b/interfaces/inner_api/native/colorspace/colorspace_helper.h @@ -58,8 +58,9 @@ public: IMAGE_EFFECT_EXPORT static ErrorCode SetHDRStaticMetadata(SurfaceBuffer *sb, const std::vector &hdrStaticMetadata); - IMAGE_EFFECT_EXPORT static ErrorCode UpdateMetadata(EffectBuffer *input); - IMAGE_EFFECT_EXPORT static ErrorCode UpdateMetadata(SurfaceBuffer *input, const EffectColorSpace &colorSpace); + IMAGE_EFFECT_EXPORT static ErrorCode UpdateMetadata(EffectBuffer *input, const std::shared_ptr &context); + IMAGE_EFFECT_EXPORT static ErrorCode UpdateMetadata(SurfaceBuffer *input, const EffectColorSpace &colorSpace, + const std::shared_ptr &context); IMAGE_EFFECT_EXPORT static ErrorCode ConvertColorSpace(std::shared_ptr &srcBuffer, std::shared_ptr &context); }; -- Gitee From 181cad903662cf52552dfbd8f36d8a145eadb1bb Mon Sep 17 00:00:00 2001 From: cenfarm Date: Wed, 16 Apr 2025 18:01:27 +0800 Subject: [PATCH 2/2] modify context param Signed-off-by: cenfarm --- .../effect/pipeline/filters/sink/image_sink_filter.cpp | 10 +++++----- frameworks/native/efilter/base/efilter.cpp | 2 +- frameworks/native/utils/common/common_utils.cpp | 7 ++++--- frameworks/native/utils/common/common_utils.h | 4 ++-- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/frameworks/native/effect/pipeline/filters/sink/image_sink_filter.cpp b/frameworks/native/effect/pipeline/filters/sink/image_sink_filter.cpp index 62966c2..d73bc62 100644 --- a/frameworks/native/effect/pipeline/filters/sink/image_sink_filter.cpp +++ b/frameworks/native/effect/pipeline/filters/sink/image_sink_filter.cpp @@ -119,7 +119,7 @@ ErrorCode ModifyPixelMap(EffectBuffer *src, const std::shared_ptr return ColorSpaceHelper::UpdateMetadata(buffer.get(), context); } - ErrorCode result = CommonUtils::ModifyPixelMapProperty(pixelMap, buffer, context->memoryManager_); + ErrorCode result = CommonUtils::ModifyPixelMapProperty(pixelMap, buffer, context); return result; } @@ -199,7 +199,7 @@ ErrorCode ModifyInnerPicture(EffectBuffer *src, const std::shared_ptrmemoryManager_, false); + ErrorCode res = CommonUtils::ModifyPixelMapProperty(mainPixel.get(), buffer, context, false); CHECK_AND_RETURN_RET_LOG(res == ErrorCode::SUCCESS, res, "ModifyInnerPicture: modify main pixelmap property fail!"); if (buffer->auxiliaryBufferInfos == nullptr) { @@ -218,7 +218,7 @@ ErrorCode ModifyInnerPicture(EffectBuffer *src, const std::shared_ptr defaultExtraInfo = std::make_shared(); std::shared_ptr gainMapEffectBuffer = std::make_shared(gainMapBufferInfo, gainMapBufferInfo->addr_, defaultExtraInfo); - return CommonUtils::ModifyPixelMapProperty(gainMap.get(), gainMapEffectBuffer, context->memoryManager_, false); + return CommonUtils::ModifyPixelMapProperty(gainMap.get(), gainMapEffectBuffer, context, false); } return ErrorCode::SUCCESS; @@ -258,7 +258,7 @@ ErrorCode ModifyPictureForGainMap(PixelMap *gainMapPixelMap, EffectBuffer *src, return ErrorCode::SUCCESS; } - return CommonUtils::ModifyPixelMapProperty(gainMapPixelMap, gainMapBuffer, context->memoryManager_, false); + return CommonUtils::ModifyPixelMapProperty(gainMapPixelMap, gainMapBuffer, context, false); } @@ -292,7 +292,7 @@ ErrorCode ModifyPictureForInnerPixelMap(PixelMap *pixelMap, EffectBuffer *src, return ErrorCode::SUCCESS; } - return CommonUtils::ModifyPixelMapProperty(pixelMap, buffer, context->memoryManager_, false); + return CommonUtils::ModifyPixelMapProperty(pixelMap, buffer, context, false); } ErrorCode ModifyPicture(EffectBuffer *src, const std::shared_ptr &buffer, diff --git a/frameworks/native/efilter/base/efilter.cpp b/frameworks/native/efilter/base/efilter.cpp index 6390bc6..b138cb2 100644 --- a/frameworks/native/efilter/base/efilter.cpp +++ b/frameworks/native/efilter/base/efilter.cpp @@ -474,7 +474,7 @@ ErrorCode OnPushDataPortsEmpty(std::shared_ptr &buffer, std::share // efilter create new buffer and inout with the same buffer. EffectBuffer *output = context->renderStrategy_->GetOutput(); if (output == nullptr || input->buffer_ == output->buffer_) { - return CommonUtils::ModifyPixelMapProperty(buffer->bufferInfo_->pixelMap_, buffer, context->memoryManager_); + return CommonUtils::ModifyPixelMapProperty(buffer->bufferInfo_->pixelMap_, buffer, context); } EFFECT_LOGW("not support different input and output buffer! filterName=%{public}s", name.c_str()); return ErrorCode::ERR_UNSUPPORTED_INOUT_WITH_DIFF_BUFFER; diff --git a/frameworks/native/utils/common/common_utils.cpp b/frameworks/native/utils/common/common_utils.cpp index 7eeaaf8..00bbf1e 100644 --- a/frameworks/native/utils/common/common_utils.cpp +++ b/frameworks/native/utils/common/common_utils.cpp @@ -853,7 +853,7 @@ ErrorCode ModifyPixelMapPropertyInner(std::shared_ptr &memoryData, P // update colorspace if need if (memoryInfo.bufferType == BufferType::DMA_BUFFER) { - EFFECT_LOGD("ModifyPixcelMapPropertyInner: update colorspace"); + EFFECT_LOGD("ModifyPixcelMapPropertyInner: update colorspace"); res = ColorSpaceHelper::UpdateMetadata(static_cast(memoryInfo.extra), memoryInfo.bufferInfo.colorSpace_, effectContext); CHECK_AND_RETURN_RET_LOG(res == ErrorCode::SUCCESS, res, @@ -864,9 +864,10 @@ ErrorCode ModifyPixelMapPropertyInner(std::shared_ptr &memoryData, P } ErrorCode CommonUtils::ModifyPixelMapProperty(PixelMap *pixelMap, const std::shared_ptr &buffer, - const std::shared_ptr &memoryManager, bool isUpdateExif) + const std::shared_ptr &context, bool isUpdateExif) { EFFECT_LOGI("ModifyPixelMapProperty enter!"); + std::shared_ptr memoryManager = context->memoryManager_; CHECK_AND_RETURN_RET_LOG(pixelMap != nullptr, ErrorCode::ERR_INPUT_NULL, "pixel map is null"); AllocatorType allocatorType = pixelMap->GetAllocatorType(); BufferType bufferType = SwitchToEffectBuffType(allocatorType); @@ -897,7 +898,7 @@ ErrorCode CommonUtils::ModifyPixelMapProperty(PixelMap *pixelMap, const std::sha MemcpyHelper::CopyData(buffer.get(), memoryData.get()); } - return ModifyPixelMapPropertyInner(memoryData, pixelMap, allocatorType, isUpdateExif); + return ModifyPixelMapPropertyInner(memoryData, pixelMap, allocatorType, isUpdateExif, context); } ErrorCode ConvertRgba2Yuv(EffectBuffer *rgba, EffectBuffer *yuv) diff --git a/frameworks/native/utils/common/common_utils.h b/frameworks/native/utils/common/common_utils.h index e85bb29..6332ee9 100644 --- a/frameworks/native/utils/common/common_utils.h +++ b/frameworks/native/utils/common/common_utils.h @@ -60,7 +60,7 @@ public: static bool EndsWithJPG(const std::string &input); static bool EndsWithHEIF(const std::string &input); static ErrorCode ModifyPixelMapProperty(PixelMap *pixelMap, const std::shared_ptr &buffer, - const std::shared_ptr &memoryManager, bool isUpdateExif = true); + const std::shared_ptr &context, bool isUpdateExif = true); static ErrorCode ModifyPixelMapPropertyForTexture(PixelMap *pixelMap, const std::shared_ptr &buffer, const std::shared_ptr &context, bool isUpdateExif = true); static ErrorCode ParseNativeWindowData(std::shared_ptr &effectBuffer, const DataType &dataType); @@ -126,4 +126,4 @@ private: } // namespace Media } // namespace OHOS -#endif // IMAGE_EFFECT_COMMON_UTILS_H \ No newline at end of file +#endif // IMAGE_EFFECT_COMMON_UTILS_H -- Gitee