/*
- * 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.
#include <dali/devel-api/adaptor-framework/thread-settings.h>
#include <dali/integration-api/adaptor-framework/adaptor.h>
#include <dali/integration-api/debug.h>
+#include <dali/public-api/adaptor-framework/encoded-image-buffer.h>
namespace Dali
{
{
namespace Internal
{
-LoadingTask::LoadingTask(uint32_t id, Dali::AnimatedImageLoading animatedImageLoading, uint32_t frameIndex)
-: pixelBuffer(),
- url(),
+LoadingTask::LoadingTask(uint32_t id, Dali::AnimatedImageLoading animatedImageLoading, uint32_t frameIndex, DevelAsyncImageLoader::PreMultiplyOnLoad preMultiplyOnLoad)
+: url(),
+ encodedImageBuffer(),
id(id),
dimensions(),
fittingMode(),
samplingMode(),
+ preMultiplyOnLoad(preMultiplyOnLoad),
+ maskPixelBuffer(),
+ contentScale(1.0f),
+ animatedImageLoading(animatedImageLoading),
+ frameIndex(frameIndex),
orientationCorrection(),
- preMultiplyOnLoad(DevelAsyncImageLoader::PreMultiplyOnLoad::OFF),
isMaskTask(false),
+ cropToMask(false),
+ loadPlanes(false)
+{
+}
+
+LoadingTask::LoadingTask(uint32_t id, const VisualUrl& url, ImageDimensions dimensions, FittingMode::Type fittingMode, SamplingMode::Type samplingMode, bool orientationCorrection, DevelAsyncImageLoader::PreMultiplyOnLoad preMultiplyOnLoad, bool loadPlanes)
+: url(url),
+ encodedImageBuffer(),
+ id(id),
+ dimensions(dimensions),
+ fittingMode(fittingMode),
+ samplingMode(samplingMode),
+ preMultiplyOnLoad(preMultiplyOnLoad),
maskPixelBuffer(),
contentScale(1.0f),
+ animatedImageLoading(),
+ frameIndex(0u),
+ orientationCorrection(orientationCorrection),
+ isMaskTask(false),
cropToMask(false),
- animatedImageLoading(animatedImageLoading),
- frameIndex(frameIndex)
+ loadPlanes(loadPlanes)
{
}
-LoadingTask::LoadingTask(uint32_t id, const VisualUrl& url, ImageDimensions dimensions, FittingMode::Type fittingMode, SamplingMode::Type samplingMode, bool orientationCorrection, DevelAsyncImageLoader::PreMultiplyOnLoad preMultiplyOnLoad)
-: pixelBuffer(),
- url(url),
+LoadingTask::LoadingTask(uint32_t id, const EncodedImageBuffer& encodedImageBuffer, ImageDimensions dimensions, FittingMode::Type fittingMode, SamplingMode::Type samplingMode, bool orientationCorrection, DevelAsyncImageLoader::PreMultiplyOnLoad preMultiplyOnLoad)
+: url(),
+ encodedImageBuffer(encodedImageBuffer),
id(id),
dimensions(dimensions),
fittingMode(fittingMode),
samplingMode(samplingMode),
- orientationCorrection(orientationCorrection),
preMultiplyOnLoad(preMultiplyOnLoad),
- isMaskTask(false),
maskPixelBuffer(),
contentScale(1.0f),
- cropToMask(false),
animatedImageLoading(),
- frameIndex(0u)
+ frameIndex(0u),
+ orientationCorrection(orientationCorrection),
+ isMaskTask(false),
+ cropToMask(false),
+ loadPlanes(false)
{
}
LoadingTask::LoadingTask(uint32_t id, Devel::PixelBuffer pixelBuffer, Devel::PixelBuffer maskPixelBuffer, float contentScale, bool cropToMask, DevelAsyncImageLoader::PreMultiplyOnLoad preMultiplyOnLoad)
-: pixelBuffer(pixelBuffer),
- url(""),
+: url(""),
+ encodedImageBuffer(),
id(id),
dimensions(),
fittingMode(),
samplingMode(),
- orientationCorrection(),
preMultiplyOnLoad(preMultiplyOnLoad),
- isMaskTask(true),
maskPixelBuffer(maskPixelBuffer),
contentScale(contentScale),
- cropToMask(cropToMask),
animatedImageLoading(),
- frameIndex(0u)
+ frameIndex(0u),
+ orientationCorrection(),
+ isMaskTask(true),
+ cropToMask(cropToMask),
+ loadPlanes(false)
{
+ pixelBuffers.push_back(pixelBuffer);
}
void LoadingTask::Load()
{
+ Devel::PixelBuffer pixelBuffer;
if(animatedImageLoading)
{
pixelBuffer = animatedImageLoading.LoadFrame(frameIndex);
}
- else if(url.IsLocalResource())
+ else if(encodedImageBuffer)
+ {
+ pixelBuffer = Dali::LoadImageFromBuffer(encodedImageBuffer.GetRawBuffer(), dimensions, fittingMode, samplingMode, orientationCorrection);
+ }
+ else if(url.IsValid() && url.IsLocalResource())
{
- pixelBuffer = Dali::LoadImageFromFile(url.GetUrl(), dimensions, fittingMode, samplingMode, orientationCorrection);
+ if(loadPlanes)
+ {
+ Dali::LoadImagePlanesFromFile(url.GetUrl(), pixelBuffers, dimensions, fittingMode, samplingMode, orientationCorrection);
+ }
+ else
+ {
+ pixelBuffer = Dali::LoadImageFromFile(url.GetUrl(), dimensions, fittingMode, samplingMode, orientationCorrection);
+ }
}
- else
+ else if(url.IsValid())
{
pixelBuffer = Dali::DownloadImageSynchronously(url.GetUrl(), dimensions, fittingMode, samplingMode, orientationCorrection);
}
- if(!pixelBuffer)
+ if(pixelBuffer)
+ {
+ pixelBuffers.push_back(pixelBuffer);
+ }
+
+ if(pixelBuffers.empty())
{
DALI_LOG_ERROR("LoadingTask::Load: Loading is failed: %s\n", url.GetUrl().c_str());
}
void LoadingTask::ApplyMask()
{
- pixelBuffer.ApplyMask(maskPixelBuffer, contentScale, cropToMask);
+ if(!pixelBuffers.empty())
+ {
+ pixelBuffers[0].ApplyMask(maskPixelBuffer, contentScale, cropToMask);
+ }
}
void LoadingTask::MultiplyAlpha()
{
- if(pixelBuffer && Pixel::HasAlpha(pixelBuffer.GetPixelFormat()))
+ if(!pixelBuffers.empty() && Pixel::HasAlpha(pixelBuffers[0].GetPixelFormat()))
{
if(preMultiplyOnLoad == DevelAsyncImageLoader::PreMultiplyOnLoad::ON)
{
- pixelBuffer.MultiplyColorByAlpha();
+ pixelBuffers[0].MultiplyColorByAlpha();
}
}
}