#include <cstring>
#include <memory>
+#include <dali/devel-api/threading/mutex.h>
#include <dali/integration-api/debug.h>
#include <dali/internal/imaging/common/file-download.h>
#include <dali/internal/system/common/file-reader.h>
if(!gif)
{
- DALI_LOG_ERROR("LOAD_ERROR_UNKNOWN_FORMAT");
+ DALI_LOG_ERROR("LOAD_ERROR_UNKNOWN_FORMAT\n");
}
}
if((gifW < w) || (gifH < h))
{
+ DALI_LOG_ERROR("gifW : %d, w : %d, gifH : %d, h : %d\n", gifW, w, gifH, h);
DALI_ASSERT_DEBUG(false && "Dimensions are bigger than the Gif image size");
goto on_error;
}
if(!success || !fileData.globalMap)
{
success = false;
- DALI_LOG_ERROR("LOAD_ERROR_CORRUPT_FILE");
+ DALI_LOG_ERROR("LOAD_ERROR_CORRUPT_FILE\n");
}
else
{
else
{
success = false;
- DALI_LOG_ERROR("LOAD_ERROR_UNKNOWN_FORMAT");
+ DALI_LOG_ERROR("LOAD_ERROR_UNKNOWN_FORMAT\n");
}
break;
}
if(DGifGetImageDesc(gifAccessor.gif) == GIF_ERROR)
{
success = false;
- DALI_LOG_ERROR("LOAD_ERROR_UNKNOWN_FORMAT");
+ DALI_LOG_ERROR("LOAD_ERROR_UNKNOWN_FORMAT\n");
break;
}
// skip decoding and just walk image to next
if(DGifGetCode(gifAccessor.gif, &img_code, &img) == GIF_ERROR)
{
success = false;
- DALI_LOG_ERROR("LOAD_ERROR_UNKNOWN_FORMAT");
+ DALI_LOG_ERROR("LOAD_ERROR_UNKNOWN_FORMAT\n");
break;
}
// skip till next...
frame = FindFrame(animated, index);
if(!frame)
{
- DALI_LOG_ERROR("LOAD_ERROR_CORRUPT_FILE");
+ DALI_LOG_ERROR("LOAD_ERROR_CORRUPT_FILE\n");
return false;
}
else if(!(frame->loaded) || !(frame->data))
loaderInfo.fileInfo.position = 0;
if(!loaderInfo.fileInfo.map)
{
- DALI_LOG_ERROR("LOAD_ERROR_CORRUPT_FILE");
+ DALI_LOG_ERROR("LOAD_ERROR_CORRUPT_FILE\n");
return false;
}
std::unique_ptr<GifAccessor> gifAccessor = std::make_unique<GifAccessor>(loaderInfo.fileInfo);
if(!gifAccessor->gif)
{
- DALI_LOG_ERROR("LOAD_ERROR_UNKNOWN_FORMAT");
+ DALI_LOG_ERROR("LOAD_ERROR_UNKNOWN_FORMAT\n");
return false;
}
loaderInfo.gifAccessor = std::move(gifAccessor);
{
if(DGifGetRecordType(loaderInfo.gifAccessor->gif, &rec) == GIF_ERROR)
{
- DALI_LOG_ERROR("LOAD_ERROR_UNKNOWN_FORMAT");
+ DALI_LOG_ERROR("LOAD_ERROR_UNKNOWN_FORMAT\n");
return false;
}
// get image desc
if(DGifGetImageDesc(loaderInfo.gifAccessor->gif) == GIF_ERROR)
{
- DALI_LOG_ERROR("LOAD_ERROR_UNKNOWN_FORMAT");
+ DALI_LOG_ERROR("LOAD_ERROR_UNKNOWN_FORMAT\n");
return false;
}
ClipCoordinates(prop.w, prop.h, &xin, &yin, frameInfo->x, frameInfo->y, frameInfo->w, frameInfo->h, &x, &y, &w, &h);
if(!DecodeImage(loaderInfo.gifAccessor->gif, thisFrame->data, prop.w, xin, yin, frameInfo->transparent, x, y, w, h, first))
{
- DALI_LOG_ERROR("LOAD_ERROR_CORRUPT_FILE");
+ DALI_LOG_ERROR("LOAD_ERROR_CORRUPT_FILE\n");
return false;
}
// and decode the gif with overwriting
if(!DecodeImage(loaderInfo.gifAccessor->gif, reinterpret_cast<uint32_t*>(pixels), prop.w, xin, yin, frameInfo->transparent, x, y, w, h, true))
{
- DALI_LOG_ERROR("LOAD_ERROR_CORRUPT_FILE");
+ DALI_LOG_ERROR("LOAD_ERROR_CORRUPT_FILE\n");
return false;
}
// skip decoding and just walk image to next
if(DGifGetCode(loaderInfo.gifAccessor->gif, &img_code, &img) == GIF_ERROR)
{
- DALI_LOG_ERROR("LOAD_ERROR_UNKNOWN_FORMAT");
+ DALI_LOG_ERROR("LOAD_ERROR_UNKNOWN_FORMAT\n");
return false;
}
{
public:
Impl(const std::string& url, bool isLocalResource)
- : mUrl(url)
+ : mUrl(url),
+ mLoadSucceeded(true),
+ mMutex()
{
loaderInfo.gifAccessor = nullptr;
int error;
loaderInfo.fileData.fileName = mUrl.c_str();
loaderInfo.fileData.isLocalResource = isLocalResource;
- ReadHeader(loaderInfo, imageProperties, &error);
+ mLoadSucceeded = ReadHeader(loaderInfo, imageProperties, &error);
}
// Moveable but not copyable
std::string mUrl;
LoaderInfo loaderInfo;
ImageProperties imageProperties;
+ bool mLoadSucceeded;
+ Mutex mMutex;
};
AnimatedImageLoadingPtr GifLoading::New(const std::string& url, bool isLocalResource)
{
int error;
bool ret = false;
+ if(!mImpl->mLoadSucceeded)
+ {
+ return false;
+ }
+
+ Mutex::ScopedLock lock(mImpl->mMutex);
+ if(!mImpl->mLoadSucceeded)
+ {
+ return false;
+ }
const int bufferSize = mImpl->imageProperties.w * mImpl->imageProperties.h * sizeof(uint32_t);
{
int error;
Dali::Devel::PixelBuffer pixelBuffer;
+ if(!mImpl->mLoadSucceeded)
+ {
+ return pixelBuffer;
+ }
+ Mutex::ScopedLock lock(mImpl->mMutex);
DALI_LOG_INFO(gGifLoadingLogFilter, Debug::Concise, "LoadFrame( frameIndex:%d )\n", frameIndex);
pixelBuffer = Dali::Devel::PixelBuffer::New(mImpl->imageProperties.w, mImpl->imageProperties.h, Dali::Pixel::RGBA8888);
return mImpl->mUrl;
}
+bool GifLoading::HasLoadingSucceeded() const
+{
+ return mImpl->mLoadSucceeded;
+}
+
} // namespace Adaptor
} // namespace Internal