From 417d259af04d2b8d75a0975388a9840d363077da Mon Sep 17 00:00:00 2001 From: lusunqi Date: Tue, 2 Sep 2025 10:06:20 +0800 Subject: [PATCH] =?UTF-8?q?=E2=80=9D=E4=BF=AE=E5=A4=8D=E4=B8=89=E6=8A=98?= =?UTF-8?q?=E5=8F=A0=E5=89=8D=E7=BD=AE=E6=8B=8D=E6=91=84=E5=85=A8=E5=B1=8F?= =?UTF-8?q?=E4=B8=AA=E6=80=A7=E8=89=B2=E5=8D=A1=E5=9B=BE=E7=89=87=EF=BC=8C?= =?UTF-8?q?=E5=86=8D=E7=BC=96=E8=BE=91=E6=97=B6=EF=BC=8C=E4=B8=AA=E6=80=A7?= =?UTF-8?q?=E8=89=B2=E5=8D=A1=E9=80=89=E9=A1=B9=E9=BB=91=E5=B1=8F=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E2=80=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lusunqi --- frameworks/native/efilter/base/efilter.cpp | 37 ++++++++++++++++++- interfaces/inner_api/native/efilter/efilter.h | 3 ++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/frameworks/native/efilter/base/efilter.cpp b/frameworks/native/efilter/base/efilter.cpp index 078eead..27e09c1 100644 --- a/frameworks/native/efilter/base/efilter.cpp +++ b/frameworks/native/efilter/base/efilter.cpp @@ -283,6 +283,41 @@ std::shared_ptr EFilter::CreateEffectBufferFromTexture(const std:: return effectBuffer; } +std::shared_ptr EFilter::CreateEffectBufferFromTexture(void *addr, + const std::shared_ptr &buffer, const std::shared_ptr &context) +{ + EFFECT_LOGD("EFilter::CreateGainMapBufferFromTexture"); + auto texture = buffer->bufferInfo_->tex_; + MemoryInfo memInfo = { + .bufferInfo = { + .width_ = texture->Width(), + .height_ = texture->Height(), + .len_ = FormatHelper::CalculateSize(texture->Width(), texture->Height(), IEffectFormat::RGBA8888), + .formatType_ = IEffectFormat::RGBA8888, + }, + .bufferType = BufferType::DMA_BUFFER, + }; + + MemoryData* memoryData = context->memoryManager_->AllocMemory(addr, memInfo); + CHECK_AND_RETURN_RET_LOG(memoryData != nullptr, buffer, "Alloc new memory fail!"); + + MemoryInfo& allocMemInfo = memoryData->memoryInfo; + auto bufferInfo = std::make_shared(); + CommonUtils::CopyBufferInfo(allocMemInfo.bufferInfo, *bufferInfo); + auto extraInfo = std::make_shared(); + CommonUtils::CopyExtraInfo(*buffer->extraInfo_, *extraInfo); + extraInfo->bufferType = allocMemInfo.bufferType; + bufferInfo->surfaceBuffer_ = static_cast(allocMemInfo.extra); + + auto effectBuffer = std::make_shared(bufferInfo, memoryData->data, extraInfo); + context->renderEnvironment_->ConvertTextureToBuffer(texture, effectBuffer.get()); + bufferInfo->surfaceBuffer_->InvalidateCache(); + effectBuffer->extraInfo_->dataType = DataType::SURFACE_BUFFER; + effectBuffer->extraInfo_->bufferType = BufferType::DMA_BUFFER; + + return effectBuffer; +} + std::shared_ptr EFilter::ConvertFromGPU2CPU(const std::shared_ptr &buffer, std::shared_ptr &context, std::shared_ptr &source) { @@ -303,7 +338,7 @@ std::shared_ptr EFilter::ConvertFromGPU2CPU(const std::shared_ptr< auto gainMapBufferInfo = gainMapBufferInfoIt->second; auto tmpGainMapBuffer = std::make_shared(gainMapBufferInfo, nullptr, input->extraInfo_); - auto gainMapBuffer = CreateEffectBufferFromTexture(tmpGainMapBuffer, context); + auto gainMapBuffer = CreateEffectBufferFromTexture(input->buffer_, tmpGainMapBuffer, context); if (!gainMapBuffer) return source; gainMapBuffer->bufferInfo_->pixelmapType_ = EffectPixelmapType::GAINMAP; diff --git a/interfaces/inner_api/native/efilter/efilter.h b/interfaces/inner_api/native/efilter/efilter.h index 19f53b8..c32f822 100644 --- a/interfaces/inner_api/native/efilter/efilter.h +++ b/interfaces/inner_api/native/efilter/efilter.h @@ -133,6 +133,9 @@ private: static std::shared_ptr CreateEffectBufferFromTexture(const std::shared_ptr &buffer, const std::shared_ptr &context); + static std::shared_ptr CreateEffectBufferFromTexture(void *addr, + const std::shared_ptr &buffer, const std::shared_ptr &context); + std::shared_ptr ConvertFromGPU2CPU(const std::shared_ptr &buffer, std::shared_ptr &context, std::shared_ptr &source); -- Gitee