X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fanimated-vector-image%2Fvector-animation-task.cpp;h=86a37ab9e12a265816b2396ed8b54a410ea5f8ed;hb=f6004b92a7b8ea0feed9c468943a3c369da4501e;hp=a1659bfd5cb6b52e058afb637347ff29d1357ebc;hpb=0c8875977f6f8e8a026eacb7a9ef57d14ce8deac;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.cpp b/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.cpp index a1659bf..86a37ab 100644 --- a/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.cpp +++ b/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.cpp @@ -254,9 +254,8 @@ void VectorAnimationTask::SetPlayRange(const Property::Array& playRange) std::string marker; if(playRange.GetElementAt(0).Get(marker)) { - if(mVectorRenderer) + if(mVectorRenderer && mVectorRenderer.GetMarkerInfo(marker, startFrame, endFrame)) { - mVectorRenderer.GetMarkerInfo(marker, startFrame, endFrame); valid = true; } } @@ -373,7 +372,7 @@ VectorAnimationTask::UploadCompletedSignalType& VectorAnimationTask::UploadCompl bool VectorAnimationTask::Rasterize() { bool stopped = false; - uint32_t currentFrame, droppedFrames = 0; + uint32_t currentFrame; { ConditionalWait::ScopedLock lock(mConditionalWait); @@ -382,14 +381,13 @@ bool VectorAnimationTask::Rasterize() // The task will be destroyed. We don't need rasterization. return false; } - droppedFrames = mDroppedFrames; } ApplyAnimationData(); if(mPlayState == PlayState::PLAYING && mUpdateFrameNumber) { - mCurrentFrame = mForward ? mCurrentFrame + droppedFrames + 1 : mCurrentFrame - droppedFrames - 1; + mCurrentFrame = mForward ? mCurrentFrame + mDroppedFrames + 1 : mCurrentFrame - mDroppedFrames - 1; Dali::ClampInPlace(mCurrentFrame, mStartFrame, mEndFrame); } @@ -525,31 +523,29 @@ uint32_t VectorAnimationTask::GetStoppedFrame(uint32_t startFrame, uint32_t endF VectorAnimationTask::TimePoint VectorAnimationTask::CalculateNextFrameTime(bool renderNow) { - uint32_t droppedFrames = 0; - - // std::chrono::time_point template has second parameter duration which defaults to the std::chrono::system_clock supported + // std::chrono::time_point template has second parameter duration which defaults to the std::chrono::steady_clock supported // duration. In some C++11 implementations it is a milliseconds duration, so it fails to compile unless mNextFrameStartTime // is casted to use the default duration. mNextFrameStartTime = std::chrono::time_point_cast(mNextFrameStartTime + std::chrono::microseconds(mFrameDurationMicroSeconds)); - auto current = std::chrono::system_clock::now(); + auto current = std::chrono::steady_clock::now(); + mDroppedFrames = 0; + if(renderNow) { mNextFrameStartTime = current; } else if(mNextFrameStartTime < current) { - while(current > std::chrono::time_point_cast(mNextFrameStartTime + std::chrono::microseconds(mFrameDurationMicroSeconds))) + uint32_t droppedFrames = 0; + + while(current > std::chrono::time_point_cast(mNextFrameStartTime + std::chrono::microseconds(mFrameDurationMicroSeconds)) && droppedFrames < mTotalFrame) { droppedFrames++; mNextFrameStartTime = std::chrono::time_point_cast(mNextFrameStartTime + std::chrono::microseconds(mFrameDurationMicroSeconds)); } - { - ConditionalWait::ScopedLock lock(mConditionalWait); - mDroppedFrames = droppedFrames; - } - mNextFrameStartTime = current; + mDroppedFrames = droppedFrames; } return mNextFrameStartTime;