X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fsvg%2Fsvg-rasterize-thread.cpp;h=24f9981e47dd09ae4cc5601ad49dea1abc51c0eb;hb=e443d5fbefaabaf421aebf83a0350ea98380a4eb;hp=e2b55b54fa3107cb2bb72734a0a55ff419977658;hpb=c052b6678e2c6d8a65545dbbe4531ea7057c1999;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/visuals/svg/svg-rasterize-thread.cpp b/dali-toolkit/internal/visuals/svg/svg-rasterize-thread.cpp index e2b55b5..24f9981 100644 --- a/dali-toolkit/internal/visuals/svg/svg-rasterize-thread.cpp +++ b/dali-toolkit/internal/visuals/svg/svg-rasterize-thread.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,8 +33,8 @@ namespace Toolkit { namespace Internal { -RasterizingTask::RasterizingTask(SvgVisual* svgRenderer, VectorImageRenderer vectorRenderer, const VisualUrl& url, float dpi, unsigned int width, unsigned int height) -: mSvgVisual(svgRenderer), +RasterizingTask::RasterizingTask(SvgVisual* svgVisual, VectorImageRenderer vectorRenderer, const VisualUrl& url, float dpi, unsigned int width, unsigned int height) +: mSvgVisual(svgVisual), mVectorRenderer(vectorRenderer), mUrl(url), mDpi(dpi), @@ -50,62 +50,55 @@ RasterizingTask::~RasterizingTask() void RasterizingTask::Load() { - if(!mUrl.IsLocalResource()) + if(mVectorRenderer.IsLoaded()) { - Dali::Vector remoteBuffer; - if(!Dali::FileLoader::DownloadFileSynchronously(mUrl.GetUrl(), remoteBuffer)) - { - DALI_LOG_ERROR("RasterizingTask::Load: Failed to download file! [%s]\n", mUrl.GetUrl().c_str()); - return; - } + // Already loaded + mLoadSuccess = true; + return; + } - remoteBuffer.PushBack('\0'); + Dali::Vector buffer; - if(!mVectorRenderer.Load(remoteBuffer, mDpi)) + if(!mUrl.IsLocalResource()) + { + if(!Dali::FileLoader::DownloadFileSynchronously(mUrl.GetUrl(), buffer)) { - DALI_LOG_ERROR("RasterizingTask::Load:Failed to load data! [%s]\n", mUrl.GetUrl().c_str()); + DALI_LOG_ERROR("Failed to download file! [%s]\n", mUrl.GetUrl().c_str()); return; } - - mLoadSuccess = true; } else { - mLoadSuccess = true; + if(!Dali::FileLoader::ReadFile(mUrl.GetUrl(), buffer)) + { + DALI_LOG_ERROR("Failed to read file! [%s]\n", mUrl.GetUrl().c_str()); + return; + } } -} -void RasterizingTask::Rasterize() -{ - if(mWidth <= 0u || mHeight <= 0u) + buffer.PushBack('\0'); + + if(!mVectorRenderer.Load(buffer, mDpi)) { - DALI_LOG_ERROR("RasterizingTask::Rasterize: Size is zero!\n"); + DALI_LOG_ERROR("Failed to load data! [%s]\n", mUrl.GetUrl().c_str()); return; } - Devel::PixelBuffer pixelBuffer = Devel::PixelBuffer::New(mWidth, mHeight, Dali::Pixel::RGBA8888); - - uint32_t defaultWidth, defaultHeight; - mVectorRenderer.GetDefaultSize(defaultWidth, defaultHeight); - - float scaleX = static_cast(mWidth) / static_cast(defaultWidth); - float scaleY = static_cast(mHeight) / static_cast(defaultHeight); - float scale = scaleX < scaleY ? scaleX : scaleY; + mLoadSuccess = true; +} - if(!mVectorRenderer.Rasterize(pixelBuffer, scale)) +void RasterizingTask::Rasterize() +{ + Devel::PixelBuffer pixelBuffer = mVectorRenderer.Rasterize(mWidth, mHeight); + if(!pixelBuffer) { - DALI_LOG_ERROR("RasterizingTask::Rasterize: Rasterize is failed! [%s]\n", mUrl.GetUrl().c_str()); + DALI_LOG_ERROR("Rasterize is failed! [%s]\n", mUrl.GetUrl().c_str()); return; } mPixelData = Devel::PixelBuffer::Convert(pixelBuffer); } -VectorImageRenderer RasterizingTask::GetVectorRenderer() const -{ - return mVectorRenderer; -} - bool RasterizingTask::IsLoaded() const { return mLoadSuccess; @@ -159,7 +152,7 @@ void SvgRasterizeThread::AddTask(RasterizingTaskPtr task) // Lock while adding task to the queue ConditionalWait::ScopedLock lock(mConditionalWait); wasEmpty = mRasterizeTasks.empty(); - if(!wasEmpty && task != NULL) + if(!wasEmpty && task) { // Remove the tasks with the same renderer. // Older task which waiting to rasterize and apply the svg to the same renderer is expired. @@ -224,32 +217,11 @@ void SvgRasterizeThread::RemoveTask(SvgVisual* visual) UnregisterProcessor(); } -void SvgRasterizeThread::DeleteImage(VectorImageRenderer vectorRenderer) -{ - // Lock while adding image to the delete queue - ConditionalWait::ScopedLock lock(mConditionalWait); - - if(mIsThreadWaiting) // no rasterization is ongoing, save to delete - { - // TODO: what? - } - else // wait to delete until current rasterization completed. - { - mDeleteSvg.PushBack(&vectorRenderer); - } -} - RasterizingTaskPtr SvgRasterizeThread::NextTaskToProcess() { // Lock while popping task out from the queue ConditionalWait::ScopedLock lock(mConditionalWait); - // Delete the image here to make sure that it is not used in the nsvgRasterize() - if(!mDeleteSvg.Empty()) - { - mDeleteSvg.Clear(); - } - // conditional wait while(mRasterizeTasks.empty()) { @@ -293,13 +265,13 @@ void SvgRasterizeThread::ApplyRasterizedSVGToSampler() { while(RasterizingTaskPtr task = NextCompletedTask()) { - task->GetSvgVisual()->ApplyRasterizedImage(task->GetVectorRenderer(), task->GetPixelData(), task->IsLoaded()); + task->GetSvgVisual()->ApplyRasterizedImage(task->GetPixelData(), task->IsLoaded()); } UnregisterProcessor(); } -void SvgRasterizeThread::Process() +void SvgRasterizeThread::Process(bool postProcessor) { ApplyRasterizedSVGToSampler(); }