: mUrl( url ),
mVectorRenderer(),
mConditionalWait(),
- mResourceReadyTrigger(),
mAnimationFinishedTrigger(),
mPlayState( PlayState::STOPPED ),
mStopBehavior( DevelImageVisual::StopBehavior::CURRENT_FRAME ),
ConditionalWait::ScopedLock lock( mConditionalWait );
mDestroyThread = true;
mConditionalWait.Notify( lock );
-
- // This should be called in the main thread to stop waiting for the dequeuable buffer.
- mVectorRenderer.StopRender();
}
DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "VectorRasterizeThread::~VectorRasterizeThread: Join [%p]\n", this );
}
}
-void VectorRasterizeThread::SetResourceReadyCallback( EventThreadCallback* callback )
-{
- ConditionalWait::ScopedLock lock( mConditionalWait );
- mResourceReadyTrigger = std::unique_ptr< EventThreadCallback >( callback );
-}
-
void VectorRasterizeThread::SetAnimationFinishedCallback( EventThreadCallback* callback )
{
ConditionalWait::ScopedLock lock( mConditionalWait );
{
ConditionalWait::ScopedLock lock( mConditionalWait );
+ if( mCurrentFrame == frameNumber )
+ {
+ DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "VectorRasterizeThread::SetCurrentFrameNumber: Set same frame [%d] [%p]\n", frameNumber, this );
+ return;
+ }
+
if( frameNumber >= mStartFrame && frameNumber <= mEndFrame )
{
mCurrentFrame = frameNumber;
DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "VectorRasterizeThread::SetLoopingMode: looping mode = %d [%p]\n", mLoopingMode, this );
}
+VectorRasterizeThread::UploadCompletedSignalType& VectorRasterizeThread::UploadCompletedSignal()
+{
+ return mVectorRenderer.UploadCompletedSignal();
+}
+
void VectorRasterizeThread::Initialize()
{
mVectorRenderer = VectorAnimationRenderer::New( mUrl );
void VectorRasterizeThread::Rasterize()
{
- bool resourceReady, stopped = false;
+ bool stopped = false;
uint32_t currentFrame, startFrame, endFrame;
int32_t loopCount;
mCurrentFrame = mForward ? mCurrentFrame + 1 : mCurrentFrame - 1;
}
- resourceReady = mResourceReady;
currentFrame = mCurrentFrame;
startFrame = mStartFrame;
endFrame = mEndFrame;
loopCount = mLoopCount;
- mNeedRender = false;
mResourceReady = true;
+ mNeedRender = false;
mCurrentFrameUpdated = false;
mUpdateFrameNumber = true;
}
mUpdateFrameNumber = false;
}
- if( !resourceReady )
- {
- DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "VectorRasterizeThread::Rasterize: Resource ready trigger [%p]\n", this );
-
- mResourceReadyTrigger->Trigger();
- }
-
if( stopped )
{
mPlayState = PlayState::STOPPED;
// Animation is finished
mAnimationFinishedTrigger->Trigger();
- DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "VectorRasterizeThread::Rasterize: Animation is finished [%p]\n", this );
+ DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "VectorRasterizeThread::Rasterize: Animation is finished [current = %d] [%p]\n", currentFrame, this );
}
auto timeToSleepUntil = currentFrameStartTime + std::chrono::nanoseconds( mFrameDurationNanoSeconds );