#define DALI_TOOLKIT_INTERNAL_ROLLING_IMAGE_CACHE_H
/*
- * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
// EXTERNAL INCLUDES
-#include <dali/devel-api/common/circular-queue.h>
#include <dali-toolkit/internal/visuals/animated-image/image-cache.h>
#include <dali-toolkit/internal/visuals/texture-manager-impl.h>
+#include <dali/devel-api/common/circular-queue.h>
namespace Dali
{
{
namespace Internal
{
-
/**
* Class to manage a rolling cache of images, where the cache size
* is smaller than the total number of images.
* This will start loading textures immediately, according to the
* batch and cache sizes.
*/
- RollingImageCache( TextureManager& textureManager,
- UrlList& urlList,
- ImageCache::FrameReadyObserver& observer,
- uint16_t cacheSize,
- uint16_t batchSize );
+ RollingImageCache(TextureManager& textureManager,
+ UrlList& urlList,
+ ImageCache::FrameReadyObserver& observer,
+ uint16_t cacheSize,
+ uint16_t batchSize);
/**
* Destructor
*/
- virtual ~RollingImageCache();
+ ~RollingImageCache() override;
/**
* Get the Nth frame. If it's not ready, this will trigger the
* sending of FrameReady() when the image becomes ready.
*/
- TextureSet Frame( uint32_t frameIndex ) override;
+ TextureSet Frame(uint32_t frameIndex) override;
/**
* Get the first frame. If it's not ready, this will trigger the
/**
* Get the next frame. If it's not ready, this will trigger the
* sending of FrameReady() when the image becomes ready.
- * This will trigger the loading of the next batch.
*/
TextureSet NextFrame() override;
+ /**
+ * Get the interval of Nth frame.
+ */
+ uint32_t GetFrameInterval(uint32_t frameIndex) const override;
+
+ /**
+ * Get the current rendered frame index.
+ * If there isn't any loaded frame, returns -1.
+ */
+ int32_t GetCurrentFrameIndex() const override;
+
+ /**
+ * Get total frame count of the animated image file.
+ */
+ int32_t GetTotalFrameCount() const override;
+
private:
/**
* @return true if the front frame is ready
/**
* Find the matching image frame, and set it to ready
*/
- void SetImageFrameReady( TextureManager::TextureId textureId );
+ void SetImageFrameReady(TextureManager::TextureId textureId);
/**
* Get the texture set of the front frame.
/**
* Get the texture id of the given index
*/
- TextureManager::TextureId GetCachedTextureId( int index ) const;
+ TextureManager::TextureId GetCachedTextureId(int index) const;
/**
* Check if the front frame has become ready - if so, inform observer
* @param[in] wasReady Readiness before call.
*/
- void CheckFrontFrame( bool wasReady );
+ void CheckFrontFrame(bool wasReady);
protected:
void UploadComplete(
TextureSet textureSet,
bool useAtlasing,
const Vector4& atlasRect,
- bool preMultiplied ) override;
+ bool preMultiplied) override;
void LoadComplete(
- bool loadSuccess,
+ bool loadSuccess,
Devel::PixelBuffer pixelBuffer,
- const VisualUrl& url,
- bool preMultiplied ) override;
+ const VisualUrl& url,
+ bool preMultiplied) override;
private:
/**
struct ImageFrame
{
unsigned int mUrlIndex = 0u;
- bool mReady = false;
+ bool mReady = false;
};
- std::vector<UrlStore>& mImageUrls;
+ std::vector<UrlStore>& mImageUrls;
CircularQueue<ImageFrame> mQueue;
};