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=64639b5290692135ece68bca2c442a1c0f8f9796;hp=1fbef381ad5f9d01f1bda02dd62571348c95cf84;hb=cc7137614f4136f571ccecc22ad1b72c01f16156;hpb=78d26caf8723599166886a1fca571c2365f227bf 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 1fbef38..64639b5 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,22 +19,19 @@ #include "async-image-loader-impl.h" // EXTERNAL INCLUDES -#include +#include namespace Dali { - namespace Toolkit { - namespace Internal { - AsyncImageLoader::AsyncImageLoader() : mLoadedSignal(), - mLoadThread( new EventThreadCallback( MakeCallback( this, &AsyncImageLoader::ProcessLoadedImage ) ) ), - mLoadTaskId( 0u ), - mIsLoadThreadStarted( false ) + mLoadThread(new EventThreadCallback(MakeCallback(this, &AsyncImageLoader::ProcessLoadedImage))), + mLoadTaskId(0u), + mIsLoadThreadStarted(false) { } @@ -49,19 +46,65 @@ IntrusivePtr AsyncImageLoader::New() return internal; } -uint32_t AsyncImageLoader::Load( const std::string& url, - ImageDimensions dimensions, - 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)); - mLoadThread.AddTask( new LoadingTask( ++mLoadTaskId, url, dimensions, fittingMode, samplingMode, orientationCorrection ) ); + 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; + } + mLoadThread.AddTask(new LoadingTask(++mLoadTaskId, url, dimensions, fittingMode, samplingMode, orientationCorrection, preMultiplyOnLoad)); + + return mLoadTaskId; +} + +uint32_t AsyncImageLoader::LoadEncodedImageBuffer(const EncodedImageBuffer& encodedImageBuffer, + ImageDimensions dimensions, + FittingMode::Type fittingMode, + SamplingMode::Type samplingMode, + bool orientationCorrection, + DevelAsyncImageLoader::PreMultiplyOnLoad preMultiplyOnLoad) +{ + if(!mIsLoadThreadStarted) + { + mLoadThread.Start(); + mIsLoadThreadStarted = true; + } + mLoadThread.AddTask(new LoadingTask(++mLoadTaskId, encodedImageBuffer, dimensions, fittingMode, samplingMode, orientationCorrection, preMultiplyOnLoad)); + + return mLoadTaskId; +} + +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; } @@ -71,9 +114,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() @@ -83,9 +131,22 @@ void AsyncImageLoader::CancelAll() void AsyncImageLoader::ProcessLoadedImage() { - while( LoadingTask *next = mLoadThread.NextCompletedTask() ) + while(LoadingTask* next = mLoadThread.NextCompletedTask()) { - mLoadedSignal.Emit( next->id, next->pixelData ); + 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; } }