X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fanimated-image%2Frolling-image-cache.cpp;h=22847786182817da7e95696af100d898a6a33831;hb=e5d4cd830e75a208dd18c743e1564a4ed1fde780;hp=b7b45ffb2317277d80b909198c4029a81e2e11c5;hpb=f00334715a31692c0bfd7eb0a7fc67c5ae09f327;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/visuals/animated-image/rolling-image-cache.cpp b/dali-toolkit/internal/visuals/animated-image/rolling-image-cache.cpp index b7b45ff..2284778 100644 --- a/dali-toolkit/internal/visuals/animated-image/rolling-image-cache.cpp +++ b/dali-toolkit/internal/visuals/animated-image/rolling-image-cache.cpp @@ -80,26 +80,40 @@ RollingImageCache::~RollingImageCache() } } -TextureSet RollingImageCache::FirstFrame() +TextureSet RollingImageCache::Frame( uint32_t frameIndex ) { - TextureSet textureSet = GetFrontTextureSet(); - - if( ! textureSet ) + // If a frame of frameIndex is not loaded, clear the queue and remove all loaded textures. + if( mImageUrls[ frameIndex ].mTextureId == TextureManager::INVALID_TEXTURE_ID ) { - mWaitingForReadyFrame = true; + mUrlIndex = frameIndex; + while( !mQueue.IsEmpty() ) + { + ImageFrame imageFrame = mQueue.PopFront(); + mTextureManager.Remove( mImageUrls[ imageFrame.mUrlIndex ].mTextureId, this ); + mImageUrls[ imageFrame.mUrlIndex ].mTextureId = TextureManager::INVALID_TEXTURE_ID; + } + LoadBatch(); + } + // If the frame is already loaded, remove previous frames of the frame in the queue + // and load new frames amount of removed frames. + else + { + bool popExist = false; + while( !mQueue.IsEmpty() && mQueue.Front().mUrlIndex != frameIndex ) + { + ImageFrame imageFrame = mQueue.PopFront(); + mTextureManager.Remove( mImageUrls[ imageFrame.mUrlIndex ].mTextureId, this ); + mImageUrls[ imageFrame.mUrlIndex ].mTextureId = TextureManager::INVALID_TEXTURE_ID; + popExist = true; + } + if( popExist ) + { + mUrlIndex = ( mQueue.Back().mUrlIndex + 1 ) % mImageUrls.size(); + LoadBatch(); + } } - return textureSet; -} - -TextureSet RollingImageCache::NextFrame() -{ TextureSet textureSet; - - ImageFrame imageFrame = mQueue.PopFront(); - mTextureManager.Remove( mImageUrls[ imageFrame.mUrlIndex ].mTextureId, this ); - mImageUrls[ imageFrame.mUrlIndex ].mTextureId = TextureManager::INVALID_TEXTURE_ID; - if( IsFrontReady() == true ) { textureSet = GetFrontTextureSet(); @@ -109,11 +123,19 @@ TextureSet RollingImageCache::NextFrame() mWaitingForReadyFrame = true; } - LoadBatch(); - return textureSet; } +TextureSet RollingImageCache::FirstFrame() +{ + return Frame( 0u ); +} + +uint32_t RollingImageCache::GetFrameInterval( uint32_t frameIndex ) +{ + return 0u; +} + bool RollingImageCache::IsFrontReady() const { return ( !mQueue.IsEmpty() && mQueue.Front().mReady ); @@ -124,7 +146,7 @@ void RollingImageCache::LoadBatch() // Try and load up to mBatchSize images, until the cache is filled. // Once the cache is filled, as frames progress, the old frame is // cleared, but not erased, and another image is loaded - bool frontFrameReady = IsFrontReady();; + bool frontFrameReady = IsFrontReady(); for( unsigned int i=0; i< mBatchSize && !mQueue.IsFull(); ++i ) {