X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fanimated-image%2Ffixed-image-cache.cpp;h=1eea6e687db9b2f074c9a35e81202f55ff6d8d83;hp=03dbcbcf45dcefe35960d051c352112300c3c4d6;hb=8c45458b64211285df3df591dfcb628126a1bc0e;hpb=149fa4a2bd6765eef1601be6957c6f608876be38 diff --git a/dali-toolkit/internal/visuals/animated-image/fixed-image-cache.cpp b/dali-toolkit/internal/visuals/animated-image/fixed-image-cache.cpp index 03dbcbc..1eea6e6 100644 --- a/dali-toolkit/internal/visuals/animated-image/fixed-image-cache.cpp +++ b/dali-toolkit/internal/visuals/animated-image/fixed-image-cache.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * Copyright (c) 2020 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. @@ -17,6 +17,9 @@ // CLASS HEADER #include +// INTERNAL HEADERS +#include // For ImageAtlasManagerPtr + namespace Dali { namespace Toolkit @@ -32,7 +35,8 @@ const bool ENABLE_ORIENTATION_CORRECTION( true ); FixedImageCache::FixedImageCache( TextureManager& textureManager, UrlList& urlList, ImageCache::FrameReadyObserver& observer, unsigned int batchSize ) -: ImageCache( textureManager, urlList, observer, batchSize ), +: ImageCache( textureManager, observer, batchSize ), + mImageUrls( urlList ), mFront(0u) { mReadyFlags.reserve( mImageUrls.size() ); @@ -41,30 +45,30 @@ FixedImageCache::FixedImageCache( FixedImageCache::~FixedImageCache() { - for( std::size_t i = 0; i < mImageUrls.size() ; ++i ) + if( mTextureManagerAlive ) { - mTextureManager.Remove( mImageUrls[i].mTextureId ); + for( std::size_t i = 0; i < mImageUrls.size() ; ++i ) + { + mTextureManager.Remove( mImageUrls[i].mTextureId, this ); + } } } -TextureSet FixedImageCache::FirstFrame() +TextureSet FixedImageCache::Frame( uint32_t frameIndex ) { - TextureSet textureSet = GetFrontTextureSet(); - - if( ! textureSet ) + while( frameIndex > mFront ) { - mWaitingForReadyFrame = true; + ++mFront; + if( mFront >= mImageUrls.size() ) + { + mFront = 0; + } + LoadBatch(); } - return textureSet; -} + mFront = frameIndex; -TextureSet FixedImageCache::NextFrame() -{ TextureSet textureSet; - ++mFront; - mFront %= mImageUrls.size(); - if( IsFrontReady() == true ) { textureSet = GetFrontTextureSet(); @@ -74,11 +78,43 @@ TextureSet FixedImageCache::NextFrame() mWaitingForReadyFrame = true; } - LoadBatch(); + return textureSet; +} + +TextureSet FixedImageCache::FirstFrame() +{ + TextureSet textureSet = GetFrontTextureSet(); + + if( ! textureSet ) + { + mWaitingForReadyFrame = true; + } + + return textureSet; +} + +TextureSet FixedImageCache::NextFrame() +{ + TextureSet textureSet = Frame((mFront + 1) % mImageUrls.size()); return textureSet; } +uint32_t FixedImageCache::GetFrameInterval( uint32_t frameIndex ) const +{ + return 0u; +} + +int32_t FixedImageCache::GetCurrentFrameIndex() const +{ + return static_cast(mFront); +} + +int32_t FixedImageCache::GetTotalFrameCount() const +{ + return mImageUrls.size(); +} + bool FixedImageCache::IsFrontReady() const { return ( mReadyFlags.size() > 0 && mReadyFlags[mFront] == true ); @@ -89,7 +125,7 @@ void FixedImageCache::LoadBatch() // Try and load up to mBatchSize images, until the cache is filled. // Once the cache is filled, mUrlIndex exceeds mImageUrls size and // no more images are loaded. - bool frontFrameReady = IsFrontReady();; + bool frontFrameReady = IsFrontReady(); for( unsigned int i=0; i< mBatchSize && mUrlIndex < mImageUrls.size(); ++i ) { @@ -102,10 +138,29 @@ void FixedImageCache::LoadBatch() // need to account for this inside the UploadComplete method using mRequestingLoad. mRequestingLoad = true; - mImageUrls[ mUrlIndex ].mTextureId = - mTextureManager.RequestLoad( url, ImageDimensions(), FittingMode::SCALE_TO_FILL, - SamplingMode::BOX_THEN_LINEAR, TextureManager::NO_ATLAS, - this, ENABLE_ORIENTATION_CORRECTION, TextureManager::ReloadPolicy::CACHED ); + bool synchronousLoading = false; + bool atlasingStatus = false; + bool loadingStatus = false; + TextureManager::MaskingDataPointer maskInfo = nullptr; + AtlasUploadObserver* atlasObserver = nullptr; + ImageAtlasManagerPtr imageAtlasManager = nullptr; + Vector4 textureRect; + Dali::ImageDimensions textureRectSize; + auto preMultiply = TextureManager::MultiplyOnLoad::LOAD_WITHOUT_MULTIPLY; + + mTextureManager.LoadTexture( + url, ImageDimensions(), FittingMode::SCALE_TO_FILL, + SamplingMode::BOX_THEN_LINEAR, maskInfo, + synchronousLoading, mImageUrls[ mUrlIndex ].mTextureId, textureRect, textureRectSize, + atlasingStatus, loadingStatus, Dali::WrapMode::Type::DEFAULT, + Dali::WrapMode::Type::DEFAULT, this, + atlasObserver, imageAtlasManager, ENABLE_ORIENTATION_CORRECTION, TextureManager::ReloadPolicy::CACHED, + preMultiply ); + + if( loadingStatus == false ) // not loading, means it's already ready. + { + SetImageFrameReady( mImageUrls[ mUrlIndex ].mTextureId ); + } mRequestingLoad = false; ++mUrlIndex; } @@ -144,7 +199,8 @@ void FixedImageCache::UploadComplete( int32_t textureId, TextureSet textureSet, bool useAtlasing, - const Vector4& atlasRect ) + const Vector4& atlasRect, + bool preMultiplied) { bool frontFrameReady = IsFrontReady(); @@ -163,6 +219,17 @@ void FixedImageCache::UploadComplete( } } +void FixedImageCache::LoadComplete( + bool loadSuccess, + Devel::PixelBuffer pixelBuffer, + const VisualUrl& url, + bool preMultiplied ) +{ + // LoadComplete is called if this TextureUploadObserver requested to load + // an image that will be returned as a type of PixelBuffer by using a method + // TextureManager::LoadPixelBuffer. +} + } //namespace Internal } //namespace Toolkit -} //namespace Dali +} //namespace Dali \ No newline at end of file