X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fimage-loader%2Fasync-image-loader-impl.cpp;h=ea10924db49929b7d1bfbbdc23a42ee0f5498840;hp=d25ea5cf7f163a1fca6b285ff1b56dcc0505832a;hb=a4b26c19783f73d4e0f3a9fdd23f5a1810406734;hpb=709f6618b60d366c84e259564c53b6ef0c43b717 diff --git a/dali-toolkit/internal/image-loader/async-image-loader-impl.cpp b/dali-toolkit/internal/image-loader/async-image-loader-impl.cpp index d25ea5c..ea10924 100644 --- a/dali-toolkit/internal/image-loader/async-image-loader-impl.cpp +++ b/dali-toolkit/internal/image-loader/async-image-loader-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * Copyright (c) 2021 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. @@ -19,23 +19,22 @@ #include "async-image-loader-impl.h" // EXTERNAL INCLUDES -#include -#include +#include + +// INTERNAL INCLUDES +#include namespace Dali { - namespace Toolkit { - namespace Internal { - AsyncImageLoader::AsyncImageLoader() : mLoadedSignal(), - mLoadThread( new EventThreadCallback( MakeCallback( this, &AsyncImageLoader::ProcessLoadedImage ) ) ), - mLoadTaskId( 0 ), - mIsLoadThreadStarted( false ) + mLoadThread(new EventThreadCallback(MakeCallback(this, &AsyncImageLoader::ProcessLoadedImage))), + mLoadTaskId(0u), + mIsLoadThreadStarted(false) { } @@ -50,21 +49,65 @@ IntrusivePtr AsyncImageLoader::New() return internal; } -uint32_t AsyncImageLoader::Load( const std::string& url, - ImageDimensions size, - FittingMode::Type fittingMode, - SamplingMode::Type samplingMode, - bool orientationCorrection ) +uint32_t AsyncImageLoader::LoadAnimatedImage(Dali::AnimatedImageLoading animatedImageLoading, + uint32_t frameIndex) { - if( !mIsLoadThreadStarted ) + if(!mIsLoadThreadStarted) { mLoadThread.Start(); mIsLoadThreadStarted = true; } + mLoadThread.AddTask(new LoadingTask(++mLoadTaskId, animatedImageLoading, frameIndex)); + + return mLoadTaskId; +} + +uint32_t AsyncImageLoader::Load(const VisualUrl& url, + ImageDimensions dimensions, + FittingMode::Type fittingMode, + SamplingMode::Type samplingMode, + bool orientationCorrection, + DevelAsyncImageLoader::PreMultiplyOnLoad preMultiplyOnLoad) +{ + if(!mIsLoadThreadStarted) + { + mLoadThread.Start(); + mIsLoadThreadStarted = true; + } + if(url.IsBufferResource()) + { + auto visualFactory = Toolkit::VisualFactory::Get(); + if(visualFactory) + { + // Get EncodedImageBuffer from texturemanager + // and make new LoadingTask with buffer + auto& textureManager = GetImplementation(visualFactory).GetTextureManager(); + + const EncodedImageBuffer& encodedBuffer = textureManager.GetEncodedImageBuffer(url.GetUrl()); + + mLoadThread.AddTask(new LoadingTask(++mLoadTaskId, encodedBuffer, dimensions, fittingMode, samplingMode, orientationCorrection, preMultiplyOnLoad)); + } + } + else + { + mLoadThread.AddTask(new LoadingTask(++mLoadTaskId, url, dimensions, fittingMode, samplingMode, orientationCorrection, preMultiplyOnLoad)); + } - BitmapLoader loader = BitmapLoader::New( url, size, fittingMode, samplingMode, orientationCorrection ); + return mLoadTaskId; +} - mLoadThread.AddTask( new LoadingTask( ++mLoadTaskId, loader ) ); +uint32_t AsyncImageLoader::ApplyMask(Devel::PixelBuffer pixelBuffer, + Devel::PixelBuffer maskPixelBuffer, + float contentScale, + bool cropToMask, + DevelAsyncImageLoader::PreMultiplyOnLoad preMultiplyOnLoad) +{ + if(!mIsLoadThreadStarted) + { + mLoadThread.Start(); + mIsLoadThreadStarted = true; + } + mLoadThread.AddTask(new LoadingTask(++mLoadTaskId, pixelBuffer, maskPixelBuffer, contentScale, cropToMask, preMultiplyOnLoad)); return mLoadTaskId; } @@ -74,9 +117,14 @@ Toolkit::AsyncImageLoader::ImageLoadedSignalType& AsyncImageLoader::ImageLoadedS return mLoadedSignal; } -bool AsyncImageLoader::Cancel( uint32_t loadingTaskId ) +Toolkit::DevelAsyncImageLoader::PixelBufferLoadedSignalType& AsyncImageLoader::PixelBufferLoadedSignal() { - return mLoadThread.CancelTask( loadingTaskId ); + return mPixelBufferLoadedSignal; +} + +bool AsyncImageLoader::Cancel(uint32_t loadingTaskId) +{ + return mLoadThread.CancelTask(loadingTaskId); } void AsyncImageLoader::CancelAll() @@ -86,9 +134,22 @@ void AsyncImageLoader::CancelAll() void AsyncImageLoader::ProcessLoadedImage() { - while( LoadingTask *next = mLoadThread.NextCompletedTask() ) + while(LoadingTask* next = mLoadThread.NextCompletedTask()) { - mLoadedSignal.Emit( next->id, next->loader.GetPixelData() ); + if(mPixelBufferLoadedSignal.GetConnectionCount() > 0) + { + mPixelBufferLoadedSignal.Emit(next->id, next->pixelBuffer); + } + else if(mLoadedSignal.GetConnectionCount() > 0) + { + PixelData pixelData; + if(next->pixelBuffer) + { + pixelData = Devel::PixelBuffer::Convert(next->pixelBuffer); + } + mLoadedSignal.Emit(next->id, pixelData); + } + delete next; } }