From: Eunki, Hong Date: Mon, 23 Sep 2024 07:49:51 +0000 (+0900) Subject: Support SamplingMode type for high quality sampling + Remove FittingMode input for... X-Git-Tag: dali_2.3.43~10^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F92%2F317992%2F5;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git Support SamplingMode type for high quality sampling + Remove FittingMode input for model texture Let we make new enum for lanczos resize method, named SINC. Also, remove some unused codes at material definition load images. Since we use only desired size and sampling mode at metadata, we don't need to give input for fitting mode and orientation corrections. Change-Id: I4df1412540f4c75a869ffa47ff4b09425f622fe1 Signed-off-by: Eunki, Hong --- diff --git a/dali-scene3d/internal/common/image-resource-loader.cpp b/dali-scene3d/internal/common/image-resource-loader.cpp index 7b2f45fa04..a930054641 100644 --- a/dali-scene3d/internal/common/image-resource-loader.cpp +++ b/dali-scene3d/internal/common/image-resource-loader.cpp @@ -90,28 +90,21 @@ struct ImageInformation { ImageInformation(const std::string url, const Dali::ImageDimensions dimensions, - Dali::FittingMode::Type fittingMode, - Dali::SamplingMode::Type samplingMode, - bool orientationCorrection) + Dali::SamplingMode::Type samplingMode) : mUrl(url), mDimensions(dimensions), - mFittingMode(fittingMode), - mSamplingMode(samplingMode), - mOrientationCorrection(orientationCorrection) + mSamplingMode(samplingMode) { } bool operator==(const ImageInformation& rhs) const { - // Check url and orientation correction is enough. - return (mUrl == rhs.mUrl) && (mOrientationCorrection == rhs.mOrientationCorrection); + return (mUrl == rhs.mUrl) && (mDimensions == rhs.mDimensions) && (mSamplingMode == rhs.mSamplingMode); } std::string mUrl; Dali::ImageDimensions mDimensions; - Dali::FittingMode::Type mFittingMode; - Dali::SamplingMode::Type mSamplingMode; - bool mOrientationCorrection; + Dali::SamplingMode::Type mSamplingMode : 5; }; // Hash functor list @@ -134,15 +127,8 @@ std::size_t GenerateHash(const ImageInformation& info) *hashTargetPtr++ = info.mDimensions.GetHeight() & 0xff; *hashTargetPtr++ = (info.mDimensions.GetHeight() >> 8u) & 0xff; - // Bit-pack the FittingMode, SamplingMode and orientation correction. - // FittingMode=2bits, SamplingMode=3bits, orientationCorrection=1bit - *hashTargetPtr = (info.mFittingMode << 4u) | (info.mSamplingMode << 1) | (info.mOrientationCorrection ? 1 : 0); - } - else - { - // We are not including sizing information, but we still need an extra byte for orientationCorrection. - hashTarget.resize(1u); - hashTarget[0u] = info.mOrientationCorrection ? 't' : 'f'; + // Bit-pack the SamplingMode. + *hashTargetPtr = (info.mSamplingMode); } return Dali::CalculateHash(info.mUrl) ^ Dali::CalculateHash(hashTarget); @@ -165,11 +151,11 @@ Dali::PixelData CreatePixelDataFromImageInfo(const ImageInformation& info, bool { oss << "d:" << info.mDimensions.GetWidth() << "x" << info.mDimensions.GetHeight() << " "; } - oss << "f:" << info.mFittingMode << " s:" << info.mSamplingMode << " c:" << info.mOrientationCorrection << " "; + oss << "s:" << info.mSamplingMode << " "; oss << "u:" << info.mUrl << "]"; }); // Load the image synchronously (block the thread here). - Dali::Devel::PixelBuffer pixelBuffer = Dali::LoadImageFromFile(info.mUrl, info.mDimensions, info.mFittingMode, info.mSamplingMode, info.mOrientationCorrection); + Dali::Devel::PixelBuffer pixelBuffer = Dali::LoadImageFromFile(info.mUrl, info.mDimensions, Dali::FittingMode::DEFAULT, info.mSamplingMode, true); if(pixelBuffer) { pixelData = Dali::Devel::PixelBuffer::Convert(pixelBuffer, releasePixelData); @@ -663,16 +649,14 @@ Dali::PixelData GetDefaultBrdfPixelData() Dali::PixelData GetCachedPixelData(const std::string& url) { - return GetCachedPixelData(url, ImageDimensions(), FittingMode::DEFAULT, SamplingMode::BOX_THEN_LINEAR, true); + return GetCachedPixelData(url, ImageDimensions(), SamplingMode::BOX_THEN_LINEAR); } Dali::PixelData GetCachedPixelData(const std::string& url, ImageDimensions dimensions, - FittingMode::Type fittingMode, - SamplingMode::Type samplingMode, - bool orientationCorrection) + SamplingMode::Type samplingMode) { - ImageInformation info(url, dimensions, fittingMode, samplingMode, orientationCorrection); + ImageInformation info(url, dimensions, samplingMode); if(gCacheImpl == nullptr) { DALI_LOG_INFO(gLogFilter, Debug::Verbose, "CacheImpl not prepared! load PixelData without cache.\n"); diff --git a/dali-scene3d/internal/common/image-resource-loader.h b/dali-scene3d/internal/common/image-resource-loader.h index b498b30d40..df5f02607a 100644 --- a/dali-scene3d/internal/common/image-resource-loader.h +++ b/dali-scene3d/internal/common/image-resource-loader.h @@ -123,16 +123,12 @@ Dali::PixelData GetCachedPixelData(const std::string& url); * @note If cache handler is not created yet, or destroyed due to app terminated, it will load image synchronously without cache. * @param[in] url The URL of the image file to load * @param[in] dimensions The width and height to fit the loaded image to - * @param[in] fittingMode The method used to fit the shape of the image before loading to the shape defined by the size parameter * @param[in] samplingMode The filtering method used when sampling pixels from the input image while fitting it to desired size - * @param[in] orientationCorrection Reorient the image to respect any orientation metadata in its header * @return A PixelData object containing the image, or an invalid object on failure */ Dali::PixelData GetCachedPixelData(const std::string& url, ImageDimensions dimensions, - FittingMode::Type fittingMode, - SamplingMode::Type samplingMode, - bool orientationCorrection); + SamplingMode::Type samplingMode); } // namespace ImageResourceLoader } // namespace Internal diff --git a/dali-scene3d/public-api/loader/load-scene-metadata.cpp b/dali-scene3d/public-api/loader/load-scene-metadata.cpp index 826e7133fd..5da6faf163 100644 --- a/dali-scene3d/public-api/loader/load-scene-metadata.cpp +++ b/dali-scene3d/public-api/loader/load-scene-metadata.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Samsung Electronics Co., Ltd. + * Copyright (c) 2024 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. @@ -41,7 +41,9 @@ struct ImageData BOX_THEN_NEAREST = Dali::SamplingMode::BOX_THEN_NEAREST, BOX_THEN_LINEAR = Dali::SamplingMode::BOX_THEN_LINEAR, NO_FILTER = Dali::SamplingMode::NO_FILTER, - DONT_CARE = Dali::SamplingMode::DONT_CARE + DONT_CARE = Dali::SamplingMode::DONT_CARE, + LANCZOS = Dali::SamplingMode::LANCZOS, + BOX_THEN_LANCZOS = Dali::SamplingMode::BOX_THEN_LANCZOS, }; static Type FromString(const char* s, size_t len); @@ -64,6 +66,8 @@ const std::map& GetStringSampli ENUM_STRING_MAPPING(ImageData::SamplingMode, BOX_THEN_LINEAR), ENUM_STRING_MAPPING(ImageData::SamplingMode, NO_FILTER), ENUM_STRING_MAPPING(ImageData::SamplingMode, DONT_CARE), + ENUM_STRING_MAPPING(ImageData::SamplingMode, LANCZOS), + ENUM_STRING_MAPPING(ImageData::SamplingMode, BOX_THEN_LANCZOS), }; return SAMPLING_MODE_TYPES; } @@ -78,17 +82,17 @@ struct MetaData const js::Reader& GetImageMetaDataReader() { static const auto IMAGE_METADATA_READER = std::move(js::Reader() - .Register(*js::MakeProperty("uri", js::Read::String, &ImageData::mImageUri)) - .Register(*js::MakeProperty("minWidth", js::Read::Number, &ImageData::mMinWidth)) - .Register(*js::MakeProperty("minHeight", js::Read::Number, &ImageData::mMinHeight)) - .Register(*js::MakeProperty("samplingMode", gt::ReadStringEnum, &ImageData::mSamplingMode))); + .Register(*js::MakeProperty("uri", js::Read::String, &ImageData::mImageUri)) + .Register(*js::MakeProperty("minWidth", js::Read::Number, &ImageData::mMinWidth)) + .Register(*js::MakeProperty("minHeight", js::Read::Number, &ImageData::mMinHeight)) + .Register(*js::MakeProperty("samplingMode", gt::ReadStringEnum, &ImageData::mSamplingMode))); return IMAGE_METADATA_READER; } const js::Reader& GetMetaDataReader() { static const auto METADATA_READER = std::move(js::Reader() - .Register(*js::MakeProperty("images", js::Read::Array::Read>, &MetaData::mImageData))); + .Register(*js::MakeProperty("images", js::Read::Array::Read>, &MetaData::mImageData))); return METADATA_READER; } } // namespace diff --git a/dali-scene3d/public-api/loader/material-definition.cpp b/dali-scene3d/public-api/loader/material-definition.cpp index 27a460b394..83bd0aada5 100644 --- a/dali-scene3d/public-api/loader/material-definition.cpp +++ b/dali-scene3d/public-api/loader/material-definition.cpp @@ -86,22 +86,18 @@ static constexpr std::string_view EMBEDDED_DATA_IMAGE_MEDIA_TYPE = "image/"; static constexpr std::string_view EMBEDDED_DATA_BASE64_ENCODING_TYPE = "base64,"; Dali::PixelData LoadImageResource(const std::string& resourcePath, - TextureDefinition& textureDefinition, - FittingMode::Type fittingMode, - bool orientationCorrection) + TextureDefinition& textureDefinition) { Dali::PixelData pixelData; if(!textureDefinition.mTextureBuffer.empty()) { - DALI_TRACE_BEGIN_WITH_MESSAGE_GENERATOR(gTraceFilter, "DALI_MODEL_LOAD_IMAGE_FROM_BUFFER", [&](std::ostringstream& oss) - { oss << "[s:" << textureDefinition.mTextureBuffer.size() << "]"; }); - Dali::Devel::PixelBuffer pixelBuffer = Dali::LoadImageFromBuffer(textureDefinition.mTextureBuffer.data(), textureDefinition.mTextureBuffer.size(), textureDefinition.mMinImageDimensions, fittingMode, textureDefinition.mSamplingMode, orientationCorrection); + DALI_TRACE_BEGIN_WITH_MESSAGE_GENERATOR(gTraceFilter, "DALI_MODEL_LOAD_IMAGE_FROM_BUFFER", [&](std::ostringstream& oss) { oss << "[s:" << textureDefinition.mTextureBuffer.size() << "]"; }); + Dali::Devel::PixelBuffer pixelBuffer = Dali::LoadImageFromBuffer(textureDefinition.mTextureBuffer.data(), textureDefinition.mTextureBuffer.size(), textureDefinition.mMinImageDimensions, FittingMode::DEFAULT, textureDefinition.mSamplingMode, true); if(pixelBuffer) { pixelData = Devel::PixelBuffer::Convert(pixelBuffer); } - DALI_TRACE_END_WITH_MESSAGE_GENERATOR(gTraceFilter, "DALI_MODEL_LOAD_IMAGE_FROM_BUFFER", [&](std::ostringstream& oss) - { + DALI_TRACE_END_WITH_MESSAGE_GENERATOR(gTraceFilter, "DALI_MODEL_LOAD_IMAGE_FROM_BUFFER", [&](std::ostringstream& oss) { oss << "["; if(pixelData) { @@ -120,15 +116,13 @@ Dali::PixelData LoadImageResource(const std::string& resourcePath, Dali::Toolkit::DecodeBase64FromString(data, buffer); uint32_t bufferSize = buffer.size(); - DALI_TRACE_BEGIN_WITH_MESSAGE_GENERATOR(gTraceFilter, "DALI_MODEL_LOAD_IMAGE_FROM_BUFFER", [&](std::ostringstream& oss) - { oss << "[embedded s:" << bufferSize << "]"; }); - Dali::Devel::PixelBuffer pixelBuffer = Dali::LoadImageFromBuffer(reinterpret_cast(buffer.data()), bufferSize, textureDefinition.mMinImageDimensions, fittingMode, textureDefinition.mSamplingMode, orientationCorrection); + DALI_TRACE_BEGIN_WITH_MESSAGE_GENERATOR(gTraceFilter, "DALI_MODEL_LOAD_IMAGE_FROM_BUFFER", [&](std::ostringstream& oss) { oss << "[embedded s:" << bufferSize << "]"; }); + Dali::Devel::PixelBuffer pixelBuffer = Dali::LoadImageFromBuffer(reinterpret_cast(buffer.data()), bufferSize, textureDefinition.mMinImageDimensions, FittingMode::DEFAULT, textureDefinition.mSamplingMode, true); if(pixelBuffer) { pixelData = Dali::Devel::PixelBuffer::Convert(pixelBuffer, true); } - DALI_TRACE_END_WITH_MESSAGE_GENERATOR(gTraceFilter, "DALI_MODEL_LOAD_IMAGE_FROM_BUFFER", [&](std::ostringstream& oss) - { + DALI_TRACE_END_WITH_MESSAGE_GENERATOR(gTraceFilter, "DALI_MODEL_LOAD_IMAGE_FROM_BUFFER", [&](std::ostringstream& oss) { oss << "["; if(pixelData) { @@ -140,7 +134,7 @@ Dali::PixelData LoadImageResource(const std::string& resourcePath, else { textureDefinition.mDirectoryPath = resourcePath; - pixelData = Internal::ImageResourceLoader::GetCachedPixelData(resourcePath + textureDefinition.mImageUri, textureDefinition.mMinImageDimensions, fittingMode, textureDefinition.mSamplingMode, orientationCorrection); + pixelData = Internal::ImageResourceLoader::GetCachedPixelData(resourcePath + textureDefinition.mImageUri, textureDefinition.mMinImageDimensions, textureDefinition.mSamplingMode); } return pixelData; } @@ -225,20 +219,19 @@ MaterialDefinition::LoadRaw(const std::string& imagesPath) // Load textures auto iTexture = mTextureStages.begin(); - auto checkStage = [&](uint32_t flags) - { + auto checkStage = [&](uint32_t flags) { return iTexture != mTextureStages.end() && MaskMatch(iTexture->mSemantic, flags); }; // Check for compulsory textures: Albedo, Metallic, Roughness, Normal if(checkStage(ALBEDO | METALLIC)) { - raw.mTextures.push_back({LoadImageResource(imagesPath, iTexture->mTexture, FittingMode::DEFAULT, true), iTexture->mTexture.mSamplerFlags}); + raw.mTextures.push_back({LoadImageResource(imagesPath, iTexture->mTexture), iTexture->mTexture.mSamplerFlags}); ++iTexture; if(checkStage(NORMAL | ROUGHNESS)) { - raw.mTextures.push_back({LoadImageResource(imagesPath, iTexture->mTexture, FittingMode::DEFAULT, true), iTexture->mTexture.mSamplerFlags}); + raw.mTextures.push_back({LoadImageResource(imagesPath, iTexture->mTexture), iTexture->mTexture.mSamplerFlags}); ++iTexture; } else // single value normal-roughness @@ -250,7 +243,7 @@ MaterialDefinition::LoadRaw(const std::string& imagesPath) { if(checkStage(ALBEDO)) { - raw.mTextures.push_back({LoadImageResource(imagesPath, iTexture->mTexture, FittingMode::DEFAULT, true), iTexture->mTexture.mSamplerFlags}); + raw.mTextures.push_back({LoadImageResource(imagesPath, iTexture->mTexture), iTexture->mTexture.mSamplerFlags}); ++iTexture; } else if(mNeedAlbedoTexture) // single value albedo, albedo-alpha or albedo-metallic @@ -284,7 +277,7 @@ MaterialDefinition::LoadRaw(const std::string& imagesPath) const bool createMetallicRoughnessAndNormal = hasTransparency || std::distance(mTextureStages.begin(), iTexture) > 0; if(checkStage(METALLIC | ROUGHNESS)) { - raw.mTextures.push_back({LoadImageResource(imagesPath, iTexture->mTexture, FittingMode::DEFAULT, true), iTexture->mTexture.mSamplerFlags}); + raw.mTextures.push_back({LoadImageResource(imagesPath, iTexture->mTexture), iTexture->mTexture.mSamplerFlags}); ++iTexture; } else if(createMetallicRoughnessAndNormal && mNeedMetallicRoughnessTexture) @@ -296,7 +289,7 @@ MaterialDefinition::LoadRaw(const std::string& imagesPath) if(checkStage(NORMAL)) { - raw.mTextures.push_back({LoadImageResource(imagesPath, iTexture->mTexture, FittingMode::DEFAULT, true), iTexture->mTexture.mSamplerFlags}); + raw.mTextures.push_back({LoadImageResource(imagesPath, iTexture->mTexture), iTexture->mTexture.mSamplerFlags}); ++iTexture; } else if(mNeedNormalTexture) @@ -315,31 +308,31 @@ MaterialDefinition::LoadRaw(const std::string& imagesPath) // Extra textures. if(checkStage(SUBSURFACE)) { - raw.mTextures.push_back({LoadImageResource(imagesPath, iTexture->mTexture, FittingMode::DEFAULT, true), iTexture->mTexture.mSamplerFlags}); + raw.mTextures.push_back({LoadImageResource(imagesPath, iTexture->mTexture), iTexture->mTexture.mSamplerFlags}); ++iTexture; } if(checkStage(OCCLUSION)) { - raw.mTextures.push_back({LoadImageResource(imagesPath, iTexture->mTexture, FittingMode::DEFAULT, true), iTexture->mTexture.mSamplerFlags}); + raw.mTextures.push_back({LoadImageResource(imagesPath, iTexture->mTexture), iTexture->mTexture.mSamplerFlags}); ++iTexture; } if(checkStage(EMISSIVE)) { - raw.mTextures.push_back({LoadImageResource(imagesPath, iTexture->mTexture, FittingMode::DEFAULT, true), iTexture->mTexture.mSamplerFlags}); + raw.mTextures.push_back({LoadImageResource(imagesPath, iTexture->mTexture), iTexture->mTexture.mSamplerFlags}); ++iTexture; } if(checkStage(SPECULAR)) { - raw.mTextures.push_back({LoadImageResource(imagesPath, iTexture->mTexture, FittingMode::DEFAULT, true), iTexture->mTexture.mSamplerFlags}); + raw.mTextures.push_back({LoadImageResource(imagesPath, iTexture->mTexture), iTexture->mTexture.mSamplerFlags}); ++iTexture; } if(checkStage(SPECULAR_COLOR)) { - raw.mTextures.push_back({LoadImageResource(imagesPath, iTexture->mTexture, FittingMode::DEFAULT, true), iTexture->mTexture.mSamplerFlags}); + raw.mTextures.push_back({LoadImageResource(imagesPath, iTexture->mTexture), iTexture->mTexture.mSamplerFlags}); ++iTexture; } @@ -409,8 +402,7 @@ TextureSet MaterialDefinition::Load(const EnvironmentDefinition::Vector& environ bool MaterialDefinition::CheckTextures(uint32_t flags) const { - return std::find_if(mTextureStages.begin(), mTextureStages.end(), [flags](const TextureStage& ts) - { return MaskMatch(ts.mSemantic, flags); }) != mTextureStages.end(); + return std::find_if(mTextureStages.begin(), mTextureStages.end(), [flags](const TextureStage& ts) { return MaskMatch(ts.mSemantic, flags); }) != mTextureStages.end(); } } // namespace Loader diff --git a/dali-toolkit/internal/texture-manager/texture-cache-manager.cpp b/dali-toolkit/internal/texture-manager/texture-cache-manager.cpp index 19c19bf318..0d8925704a 100644 --- a/dali-toolkit/internal/texture-manager/texture-cache-manager.cpp +++ b/dali-toolkit/internal/texture-manager/texture-cache-manager.cpp @@ -525,8 +525,8 @@ TextureCacheManager::TextureHash TextureCacheManager::GenerateHash( *hashTargetPtr++ = (size.GetHeight() >> 8u) & 0xff; // Bit-pack the FittingMode, SamplingMode. - // FittingMode=2bits, SamplingMode=3bits - *hashTargetPtr = (fittingMode << 3u) | (samplingMode); + // FittingMode=3bits, SamplingMode=4bits + *hashTargetPtr = (fittingMode << 4u) | (samplingMode); } // Append whether we will not correction orientation. We don't do additional job when it is true, the general cases. diff --git a/dali-toolkit/internal/texture-manager/texture-manager-type.h b/dali-toolkit/internal/texture-manager/texture-manager-type.h index 1f54fb7cbe..10f0cec5de 100644 --- a/dali-toolkit/internal/texture-manager/texture-manager-type.h +++ b/dali-toolkit/internal/texture-manager/texture-manager-type.h @@ -270,8 +270,8 @@ struct TextureInfo float scaleFactor; ///< The scale factor to apply to the Texture when masking int32_t referenceCount; ///< The reference count of clients using this Texture LoadState loadState; ///< The load state showing the load progress of the Texture - Dali::FittingMode::Type fittingMode : 3; ///< The requested FittingMode - Dali::SamplingMode::Type samplingMode : 3; ///< The requested SamplingMode + Dali::FittingMode::Type fittingMode : 4; ///< The requested FittingMode + Dali::SamplingMode::Type samplingMode : 5; ///< The requested SamplingMode StorageType storageType; ///< CPU storage / GPU upload; Dali::AnimatedImageLoading animatedImageLoading; ///< AnimatedImageLoading that contains animated image information. uint32_t frameIndex; ///< Frame index that be loaded, in case of animated image diff --git a/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp b/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp index 4ccaa6641d..a643e0153c 100644 --- a/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp +++ b/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp @@ -57,6 +57,7 @@ DALI_ENUM_TO_STRING_TABLE_BEGIN(FITTING_MODE) DALI_ENUM_TO_STRING_WITH_SCOPE(Dali::FittingMode, SCALE_TO_FILL) DALI_ENUM_TO_STRING_WITH_SCOPE(Dali::FittingMode, FIT_WIDTH) DALI_ENUM_TO_STRING_WITH_SCOPE(Dali::FittingMode, FIT_HEIGHT) + DALI_ENUM_TO_STRING_WITH_SCOPE(Dali::FittingMode, VISUAL_FITTING) DALI_ENUM_TO_STRING_WITH_SCOPE(Dali::FittingMode, DEFAULT) DALI_ENUM_TO_STRING_TABLE_END(FITTING_MODE) @@ -69,6 +70,9 @@ DALI_ENUM_TO_STRING_TABLE_BEGIN(SAMPLING_MODE) DALI_ENUM_TO_STRING_WITH_SCOPE(Dali::SamplingMode, BOX_THEN_LINEAR) DALI_ENUM_TO_STRING_WITH_SCOPE(Dali::SamplingMode, NO_FILTER) DALI_ENUM_TO_STRING_WITH_SCOPE(Dali::SamplingMode, DONT_CARE) + DALI_ENUM_TO_STRING_WITH_SCOPE(Dali::SamplingMode, LANCZOS) + DALI_ENUM_TO_STRING_WITH_SCOPE(Dali::SamplingMode, BOX_THEN_LANCZOS) + DALI_ENUM_TO_STRING_WITH_SCOPE(Dali::SamplingMode, DEFAULT) DALI_ENUM_TO_STRING_TABLE_END(SAMPLING_MODE) // stop behavior @@ -282,9 +286,9 @@ AnimatedImageVisual::AnimatedImageVisual(VisualFactoryCache& factoryCache, Image mActionStatus(DevelAnimatedImageVisual::Action::PLAY), mWrapModeU(WrapMode::DEFAULT), mWrapModeV(WrapMode::DEFAULT), + mStopBehavior(DevelImageVisual::StopBehavior::CURRENT_FRAME), mFittingMode(FittingMode::VISUAL_FITTING), mSamplingMode(SamplingMode::BOX_THEN_LINEAR), - mStopBehavior(DevelImageVisual::StopBehavior::CURRENT_FRAME), mStartFirstFrame(false), mIsJumpTo(false) { diff --git a/dali-toolkit/internal/visuals/animated-image/animated-image-visual.h b/dali-toolkit/internal/visuals/animated-image/animated-image-visual.h index 63e87aeb15..e65cd7a142 100644 --- a/dali-toolkit/internal/visuals/animated-image/animated-image-visual.h +++ b/dali-toolkit/internal/visuals/animated-image/animated-image-visual.h @@ -314,9 +314,9 @@ private: Dali::WrapMode::Type mWrapModeU : 3; Dali::WrapMode::Type mWrapModeV : 3; - Dali::FittingMode::Type mFittingMode : 3; - Dali::SamplingMode::Type mSamplingMode : 4; DevelImageVisual::StopBehavior::Type mStopBehavior : 2; + Dali::FittingMode::Type mFittingMode : 4; + Dali::SamplingMode::Type mSamplingMode : 5; bool mStartFirstFrame : 1; bool mIsJumpTo : 1; }; diff --git a/dali-toolkit/internal/visuals/animated-image/image-cache.cpp b/dali-toolkit/internal/visuals/animated-image/image-cache.cpp index ece9014ea7..4574e01535 100644 --- a/dali-toolkit/internal/visuals/animated-image/image-cache.cpp +++ b/dali-toolkit/internal/visuals/animated-image/image-cache.cpp @@ -36,11 +36,11 @@ ImageCache::ImageCache(TextureManager& textureManager, mObserver(observer), mMaskingData(maskingData), mDesiredSize(size), - mFittingMode(fittingMode), - mSamplingMode(samplingMode), mBatchSize(batchSize), mInterval(interval), mLoadState(TextureManager::LoadState::NOT_STARTED), + mFittingMode(fittingMode), + mSamplingMode(samplingMode), mRequestingLoad(false), mPreMultiplyOnLoad(preMultiplyOnLoad) { diff --git a/dali-toolkit/internal/visuals/animated-image/image-cache.h b/dali-toolkit/internal/visuals/animated-image/image-cache.h index aee80b2751..84c4d1e311 100644 --- a/dali-toolkit/internal/visuals/animated-image/image-cache.h +++ b/dali-toolkit/internal/visuals/animated-image/image-cache.h @@ -144,11 +144,11 @@ protected: FrameReadyObserver& mObserver; TextureManager::MaskingDataPointer& mMaskingData; Dali::ImageDimensions mDesiredSize; - Dali::FittingMode::Type mFittingMode : 3; - Dali::SamplingMode::Type mSamplingMode : 4; uint32_t mBatchSize; uint32_t mInterval; TextureManager::LoadState mLoadState; + Dali::FittingMode::Type mFittingMode : 4; + Dali::SamplingMode::Type mSamplingMode : 5; bool mRequestingLoad : 1; bool mPreMultiplyOnLoad : 1; }; diff --git a/dali-toolkit/internal/visuals/image/image-visual.cpp b/dali-toolkit/internal/visuals/image/image-visual.cpp index f299975907..7c535bfbda 100644 --- a/dali-toolkit/internal/visuals/image/image-visual.cpp +++ b/dali-toolkit/internal/visuals/image/image-visual.cpp @@ -76,6 +76,9 @@ DALI_ENUM_TO_STRING_TABLE_BEGIN(SAMPLING_MODE) DALI_ENUM_TO_STRING_WITH_SCOPE(Dali::SamplingMode, BOX_THEN_LINEAR) DALI_ENUM_TO_STRING_WITH_SCOPE(Dali::SamplingMode, NO_FILTER) DALI_ENUM_TO_STRING_WITH_SCOPE(Dali::SamplingMode, DONT_CARE) + DALI_ENUM_TO_STRING_WITH_SCOPE(Dali::SamplingMode, LANCZOS) + DALI_ENUM_TO_STRING_WITH_SCOPE(Dali::SamplingMode, BOX_THEN_LANCZOS) + DALI_ENUM_TO_STRING_WITH_SCOPE(Dali::SamplingMode, DEFAULT) DALI_ENUM_TO_STRING_TABLE_END(SAMPLING_MODE) // wrap modes diff --git a/dali-toolkit/internal/visuals/image/image-visual.h b/dali-toolkit/internal/visuals/image/image-visual.h index 690624ce91..e5060af685 100644 --- a/dali-toolkit/internal/visuals/image/image-visual.h +++ b/dali-toolkit/internal/visuals/image/image-visual.h @@ -95,6 +95,8 @@ typedef IntrusivePtr ImageVisualPtr; * "BOX_THEN_LINEAR" * "NO_FILTER" * "DONT_CARE" + * "LANCZOS" + * "BOX_THEN_LANCZOS" * "DEFAULT" * * where loadPolicy should be one of the following image loading modes @@ -386,8 +388,8 @@ private: ImageVisualShaderFactory& mImageVisualShaderFactory; - Dali::FittingMode::Type mFittingMode : 3; - Dali::SamplingMode::Type mSamplingMode : 4; + Dali::FittingMode::Type mFittingMode : 4; + Dali::SamplingMode::Type mSamplingMode : 5; Dali::WrapMode::Type mWrapModeU : 3; Dali::WrapMode::Type mWrapModeV : 3; Dali::Toolkit::ImageVisual::LoadPolicy::Type mLoadPolicy;