+ bool nextFrame = false;
+ uint32_t frameIndex = mImageCache->GetCurrentFrameIndex();
+
+ if(mIsJumpTo)
+ {
+ mIsJumpTo = false;
+ frameIndex = mFrameIndexForJumpTo;
+ }
+ else if(mActionStatus == DevelAnimatedImageVisual::Action::PAUSE)
+ {
+ return false;
+ }
+ else if(mActionStatus == DevelAnimatedImageVisual::Action::STOP)
+ {
+ frameIndex = 0;
+ if(mStopBehavior == DevelImageVisual::StopBehavior::FIRST_FRAME)
+ {
+ frameIndex = 0;
+ }
+ else if(mStopBehavior == DevelImageVisual::StopBehavior::LAST_FRAME)
+ {
+ frameIndex = mFrameCount - 1;
+ }
+ else
+ {
+ return false; // Do not draw already rendered scene twice.
+ }
+ }
+ else
+ {
+ if(mFrameCount > 1)
+ {
+ nextFrame = true;
+ frameIndex++;
+ if(frameIndex >= mFrameCount)
+ {
+ frameIndex %= mFrameCount;
+ ++mCurrentLoopIndex;
+ }
+
+ if(mLoopCount >= 0 && mCurrentLoopIndex >= mLoopCount)
+ {
+ // This will stop timer
+ mActionStatus = DevelAnimatedImageVisual::Action::STOP;
+ return DisplayNextFrame();
+ }
+ }
+
+ unsigned int delay = mImageCache->GetFrameInterval(frameIndex);
+ if(delay > 0u)
+ {
+ if(mFrameDelayTimer.GetInterval() != delay)
+ {
+ mFrameDelayTimer.SetInterval(delay);
+ }
+ }
+ }
+
+ DALI_LOG_INFO(gAnimImgLogFilter, Debug::Concise, "AnimatedImageVisual::DisplayNextFrame(this:%p) CurrentFrameIndex:%d\n", this, frameIndex);
+
+ if(nextFrame)
+ {
+ textureSet = mImageCache->NextFrame();
+ }
+ else
+ {
+ textureSet = mImageCache->Frame(frameIndex);
+ }
+
+ continueTimer = (mActionStatus == DevelAnimatedImageVisual::Action::PLAY) ? true : false;