TizenVectorAnimationRenderer::TizenVectorAnimationRenderer()
: mUrl(),
mBuffers(),
+ mMutex(),
mTargetSurface(),
mRenderer(),
mTbmQueue( NULL ),
TizenVectorAnimationRenderer::~TizenVectorAnimationRenderer()
{
+ Dali::Mutex::ScopedLock lock( mMutex );
+
for( auto&& iter : mBuffers )
{
tbm_surface_internal_unref( iter.first );
return true;
}
+void TizenVectorAnimationRenderer::SetSize( uint32_t width, uint32_t height )
+{
+ Dali::Mutex::ScopedLock lock( mMutex );
+
+ mTargetSurface->SetSize( width, height );
+
+ mWidth = width;
+ mHeight = height;
+
+ // Reset the buffer list
+ for( auto&& iter : mBuffers )
+ {
+ tbm_surface_internal_unref( iter.first );
+ }
+ mBuffers.clear();
+
+ DALI_LOG_RELEASE_INFO( "TizenVectorAnimationRenderer::SetSize: width = %d, height = %d\n", mWidth, mHeight );
+}
+
bool TizenVectorAnimationRenderer::StartRender()
{
mRenderer = lottie::Animation::loadFromFile( mUrl );
void TizenVectorAnimationRenderer::StopRender()
{
+ Dali::Mutex::ScopedLock lock( mMutex );
+
if( mTbmQueue )
{
tbm_surface_queue_flush( mTbmQueue );
void TizenVectorAnimationRenderer::Render( uint32_t frameNumber )
{
+ Dali::Mutex::ScopedLock lock( mMutex );
+
if( tbm_surface_queue_can_dequeue( mTbmQueue, 1 ) )
{
tbm_surface_h tbmSurface;
unsigned char* buffer = info.planes[0].ptr;
// Create Surface object
- lottie::Surface surface( reinterpret_cast< uint32_t* >( buffer ), static_cast< size_t >( info.width ), static_cast< size_t >( info.height ), static_cast< size_t >( info.planes[0].stride ) );
+ lottie::Surface surface( reinterpret_cast< uint32_t* >( buffer ), mWidth, mHeight, static_cast< size_t >( info.planes[0].stride ) );
// Push the buffer
mBuffers.push_back( SurfacePair( tbmSurface, surface ) );
// EXTERNAL INCLUDES
#include <dali/public-api/math/uint-16-pair.h>
#include <dali/public-api/common/vector-wrapper.h>
+#include <dali/devel-api/threading/mutex.h>
#include <dali/devel-api/adaptor-framework/native-image-source-queue.h>
#include <dali/devel-api/adaptor-framework/vector-animation-renderer-plugin.h>
#include <memory>
*/
bool CreateRenderer( const std::string& url, Renderer renderer, uint32_t width, uint32_t height ) override;
+ /**
+ * @copydoc Dali::VectorAnimationRendererPlugin::SetSize()
+ */
+ void SetSize( uint32_t width, uint32_t height ) override;
+
/**
* @copydoc Dali::VectorAnimationRendererPlugin::StartRender()
*/
std::string mUrl; ///< The content file path
std::vector< SurfacePair > mBuffers; ///< EGL Image vector
+ Dali::Mutex mMutex; ///< Mutex
NativeImageSourceQueuePtr mTargetSurface; ///< The target surface
std::unique_ptr< lottie::Animation > mRenderer; ///< The vector animation renderer
tbm_surface_queue_h mTbmQueue; ///< Tbm surface queue handle