[Tizen] Set the LoadSuccessflag to false after ReleaseResource() is called
[platform/core/uifw/dali-adaptor.git] / dali / internal / imaging / common / webp-loading.cpp
index 88a8eb5..8efdc5b 100644 (file)
@@ -193,6 +193,9 @@ public:
       free((void*)mBuffer);
       mBuffer = nullptr;
     }
+
+    // Set the flag so that webp information can be reloaded when visual is re-attached to scene.
+    mLoadSucceeded = false;
   }
 
   // Moveable but not copyable
@@ -315,6 +318,7 @@ Dali::Devel::PixelBuffer WebPLoading::LoadFrame(uint32_t frameIndex)
       free((void*)frameBuffer);
     }
     mImpl->ReleaseResource();
+
     return pixelBuffer;
   }
 #endif
@@ -352,22 +356,26 @@ Dali::Devel::PixelBuffer WebPLoading::DecodeFrame(uint32_t frameIndex)
 {
   Dali::Devel::PixelBuffer pixelBuffer;
 #ifdef DALI_ANIMATED_WEBP_ENABLED
-  if(mImpl->mLatestLoadedFrame > static_cast<int32_t>(frameIndex))
+  if(mImpl->mLatestLoadedFrame >= static_cast<int32_t>(frameIndex))
   {
     mImpl->mLatestLoadedFrame = INITIAL_INDEX;
     WebPAnimDecoderReset(mImpl->mWebPAnimDecoder);
   }
 
-  uint8_t* frameBuffer;
   int32_t timestamp;
+  uint8_t* frameBuffer = nullptr;
   for(; mImpl->mLatestLoadedFrame < static_cast<int32_t>(frameIndex);)
   {
     WebPAnimDecoderGetNext(mImpl->mWebPAnimDecoder, &frameBuffer, &timestamp);
     mImpl->mTimeStamp[++mImpl->mLatestLoadedFrame] = timestamp;
   }
-  const int bufferSize = mImpl->mWebPAnimInfo.canvas_width * mImpl->mWebPAnimInfo.canvas_height * sizeof(uint32_t);
-  pixelBuffer = Dali::Devel::PixelBuffer::New(mImpl->mWebPAnimInfo.canvas_width, mImpl->mWebPAnimInfo.canvas_height, Dali::Pixel::RGBA8888);
-  memcpy(pixelBuffer.GetBuffer(), frameBuffer, bufferSize);
+
+  if(frameBuffer != nullptr)
+  {
+    const int bufferSize = mImpl->mWebPAnimInfo.canvas_width * mImpl->mWebPAnimInfo.canvas_height * sizeof(uint32_t);
+    pixelBuffer          = Dali::Devel::PixelBuffer::New(mImpl->mWebPAnimInfo.canvas_width, mImpl->mWebPAnimInfo.canvas_height, Dali::Pixel::RGBA8888);
+    memcpy(pixelBuffer.GetBuffer(), frameBuffer, bufferSize);
+  }
 
 #endif
   return pixelBuffer;