- If an webp is loaded by image-visual, the image-visual loads only the first frame and renders.
- So, after the first frame is loaded, the opened file should be closed.
- And if a single frame webp is loaded by animated-image-visual, we don't keep the buffer until the loader is deleted.
Change-Id: Ibbee0b5e410edeb49593648975e19eeb82e929f8
Signed-off-by: Seungho Baek <sbsh.baek@samsung.com>
WebPAnimDecoderGetInfo(webPAnimDecoder, &webPAnimInfo);
width = webPAnimInfo.canvas_width;
height = webPAnimInfo.canvas_height;
WebPAnimDecoderGetInfo(webPAnimDecoder, &webPAnimInfo);
width = webPAnimInfo.canvas_width;
height = webPAnimInfo.canvas_height;
+ ReleaseResource(webPData, webPAnimDecoder);
bitmap = Dali::Devel::PixelBuffer::New(webPAnimInfo.canvas_width, webPAnimInfo.canvas_height, Dali::Pixel::RGBA8888);
const int32_t bufferSize = webPAnimInfo.canvas_width * webPAnimInfo.canvas_height * sizeof(uint32_t);
memcpy(bitmap.GetBuffer(), frameBuffer, bufferSize);
bitmap = Dali::Devel::PixelBuffer::New(webPAnimInfo.canvas_width, webPAnimInfo.canvas_height, Dali::Pixel::RGBA8888);
const int32_t bufferSize = webPAnimInfo.canvas_width * webPAnimInfo.canvas_height * sizeof(uint32_t);
memcpy(bitmap.GetBuffer(), frameBuffer, bufferSize);
+ ReleaseResource(webPData, webPAnimDecoder);
{
Internal::Platform::FileReader fileReader(mUrl);
fp = fileReader.GetFile();
{
Internal::Platform::FileReader fileReader(mUrl);
fp = fileReader.GetFile();
- // Moveable but not copyable
-
- Impl(const Impl&) = delete;
- Impl& operator=(const Impl&) = delete;
- Impl(Impl&&) = default;
- Impl& operator=(Impl&&) = default;
-
- ~Impl()
{
#ifdef DALI_ANIMATED_WEBP_ENABLED
{
#ifdef DALI_ANIMATED_WEBP_ENABLED
+ if(&mWebPData != nullptr)
{
mWebPData.bytes = nullptr;
WebPDataInit(&mWebPData);
}
{
mWebPData.bytes = nullptr;
WebPDataInit(&mWebPData);
}
+ if(mWebPAnimDecoder != nullptr)
{
WebPAnimDecoderDelete(mWebPAnimDecoder);
{
WebPAnimDecoderDelete(mWebPAnimDecoder);
+ mWebPAnimDecoder = nullptr;
- free((void*)mBuffer);
- mBuffer = nullptr;
+ if(mBuffer != nullptr)
+ {
+ free((void*)mBuffer);
+ mBuffer = nullptr;
+ }
+ }
+
+ // Moveable but not copyable
+
+ Impl(const Impl&) = delete;
+ Impl& operator=(const Impl&) = delete;
+ Impl(Impl&&) = default;
+ Impl& operator=(Impl&&) = default;
+
+ ~Impl()
+ {
+ ReleaseResource();
const int32_t imageBufferSize = width * height * sizeof(uint8_t) * channelNumber;
memcpy(pixelBuffer.GetBuffer(), frameBuffer, imageBufferSize);
free((void*)frameBuffer);
const int32_t imageBufferSize = width * height * sizeof(uint8_t) * channelNumber;
memcpy(pixelBuffer.GetBuffer(), frameBuffer, imageBufferSize);
free((void*)frameBuffer);
+ mImpl->ReleaseResource();
+ return pixelBuffer;