[Tizen] Fix the gif issue when ImageView uses SynchronosLoading 94/271094/4
authortscholb <scholb.kim@samsung.com>
Tue, 15 Feb 2022 08:13:16 +0000 (17:13 +0900)
committertscholb <scholb.kim@samsung.com>
Thu, 24 Feb 2022 06:14:41 +0000 (15:14 +0900)
when ImageView with gif used synchronosLoading, its animation stopped.
it is because image cache can't get probably imageCount.
so i fix them.

Change-Id: I56a54562ad99e40ca27e7cc47b0eee924414998f

dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp
dali-toolkit/internal/visuals/animated-image/rolling-animated-image-cache.cpp

index bfa0118..44f0a41 100644 (file)
@@ -854,6 +854,7 @@ void AnimatedImageVisual::OnInitialize()
 void AnimatedImageVisual::StartFirstFrame(TextureSet& textureSet, uint32_t firstInterval)
 {
   DALI_LOG_INFO(gAnimImgLogFilter, Debug::Concise, "AnimatedImageVisual::StartFirstFrame()\n");
+  mFrameCount = mImageCache->GetTotalFrameCount();
 
   mStartFirstFrame = false;
   if(mImpl->mRenderer)
@@ -897,7 +898,6 @@ TextureSet AnimatedImageVisual::PrepareTextureSet()
   {
     SetImageSize(textureSet);
   }
-
   return textureSet;
 }
 
@@ -941,7 +941,6 @@ void AnimatedImageVisual::FrameReady(TextureSet textureSet, uint32_t interval)
 
   if(mStartFirstFrame)
   {
-    mFrameCount = mImageCache->GetTotalFrameCount();
     StartFirstFrame(textureSet, interval);
   }
   else
index 5bee46c..263cf8d 100644 (file)
@@ -140,7 +140,6 @@ TextureSet RollingAnimatedImageCache::Frame(uint32_t frameIndex)
       textureSet = GetFrontTextureSet();
     }
   }
-
   return textureSet;
 }
 
@@ -220,6 +219,18 @@ TextureSet RollingAnimatedImageCache::RequestFrameLoading(uint32_t frameIndex, b
   {
     // Synchronous loading is failed
     mLoadState = TextureManager::LoadState::LOAD_FAILED;
+    return textureSet;
+  }
+
+  if(synchronousLoading)
+  {
+    if(DALI_UNLIKELY(mFrameCount != mAnimatedImageLoading.GetImageCount()))
+    {
+      mFrameCount = mAnimatedImageLoading.GetImageCount();
+      mImageUrls.resize(mFrameCount);
+      mIntervals.assign(mFrameCount, 0);
+    }
+    mIntervals[mQueue.Back().mFrameNumber] = mAnimatedImageLoading.GetFrameInterval(frameIndex);
   }
 
   return textureSet;