X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fanimated-vector-image%2Fvector-animation-task.cpp;h=8258fb7e5ffb42025b45c8c2b5b703f4ca411767;hp=0445df77b88beab574499bdeb400b2462b2a8c06;hb=374298ffaa32c7c4bef9ba379d366e33588529c4;hpb=313392fb575a7b9bf3657d2091adc77adc7eb3ca 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 0445df7..8258fb7 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 @@ -92,6 +92,17 @@ VectorAnimationTask::~VectorAnimationTask() DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "VectorAnimationTask::~VectorAnimationTask: destructor [%p]\n", this ); } +void VectorAnimationTask::Finalize() +{ + // Release some objects in the main thread + if( mAnimationFinishedTrigger ) + { + mAnimationFinishedTrigger.reset(); + } + + mVectorRenderer.Finalize(); +} + void VectorAnimationTask::SetRenderer( Renderer renderer ) { ConditionalWait::ScopedLock lock( mConditionalWait ); @@ -170,7 +181,10 @@ void VectorAnimationTask::RenderFrame() void VectorAnimationTask::SetAnimationFinishedCallback( EventThreadCallback* callback ) { ConditionalWait::ScopedLock lock( mConditionalWait ); - mAnimationFinishedTrigger = std::unique_ptr< EventThreadCallback >( callback ); + if( callback ) + { + mAnimationFinishedTrigger = std::unique_ptr< EventThreadCallback >( callback ); + } } void VectorAnimationTask::SetLoopCount( int32_t count ) @@ -276,6 +290,7 @@ void VectorAnimationTask::SetCurrentFrameNumber( uint32_t frameNumber ) mCurrentFrame = frameNumber; mCurrentFrameUpdated = true; + mUpdateFrameNumber = false; mResourceReady = false; DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "VectorAnimationTask::SetCurrentFrameNumber: frame number = %d [%p]\n", mCurrentFrame, this ); @@ -317,6 +332,11 @@ void VectorAnimationTask::SetLoopingMode( DevelImageVisual::LoopingMode::Type lo DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "VectorAnimationTask::SetLoopingMode: looping mode = %d [%p]\n", mLoopingMode, this ); } +void VectorAnimationTask::GetLayerInfo( Property::Map& map ) const +{ + mVectorRenderer.GetLayerInfo( map ); +} + VectorAnimationTask::UploadCompletedSignalType& VectorAnimationTask::UploadCompletedSignal() { return mVectorRenderer.UploadCompletedSignal(); @@ -429,11 +449,15 @@ bool VectorAnimationTask::Rasterize() } // Rasterize - bool renderSuccess = mVectorRenderer.Render( currentFrame ); - if( !renderSuccess ) + bool renderSuccess = false; + if( mVectorRenderer ) { - DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "VectorAnimationTask::Rasterize: Rendering failed. Try again later.[%d] [%p]\n", currentFrame, this ); - mUpdateFrameNumber = false; + renderSuccess = mVectorRenderer.Render( currentFrame ); + if( !renderSuccess ) + { + DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "VectorAnimationTask::Rasterize: Rendering failed. Try again later.[%d] [%p]\n", currentFrame, this ); + mUpdateFrameNumber = false; + } } if( stopped && renderSuccess ) @@ -495,7 +519,11 @@ uint32_t VectorAnimationTask::GetStoppedFrame( uint32_t startFrame, uint32_t end std::chrono::time_point< std::chrono::system_clock > VectorAnimationTask::CalculateNextFrameTime( bool renderNow ) { - mNextFrameStartTime = mNextFrameStartTime + std::chrono::nanoseconds( mFrameDurationNanoSeconds ); + // std::chrono::time_point template has second parameter duration which defaults to the std::chrono::system_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< std::chrono::time_point< std::chrono::system_clock >::duration >( + mNextFrameStartTime + std::chrono::nanoseconds( mFrameDurationNanoSeconds ) ); auto current = std::chrono::system_clock::now(); if( renderNow || mNextFrameStartTime < current ) {