summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
c5fbec7)
Some gif image failed to load the image map.
Maybe giflib re-use the memory of ColorMapPtr internally.
This patch make we don't cache localColorMapPtr and make always
generate colormap vector.
Due to the generating frequency, I increase the threshold a little.
Change-Id: Ie91723f0053f762d65c7ff3d25f74a1a6276b61b
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
const int IMG_MAX_SIZE = 65000;
constexpr size_t MAXIMUM_DOWNLOAD_IMAGE_SIZE = 50 * 1024 * 1024;
const int IMG_MAX_SIZE = 65000;
constexpr size_t MAXIMUM_DOWNLOAD_IMAGE_SIZE = 50 * 1024 * 1024;
-constexpr int LOCAL_CACHED_COLOR_GENERATE_THRESHOLD = 16; ///< Generate color map optimize only if colorCount * threshold < width * height, So we don't loop if image is small
+constexpr int LOCAL_CACHED_COLOR_GENERATE_THRESHOLD = 64; ///< Generate color map optimize only if colorCount * threshold < width * height, So we don't loop if image is small
#if GIFLIB_MAJOR < 5
const int DISPOSE_BACKGROUND = 2; /* Set area too background color */
#if GIFLIB_MAJOR < 5
const int DISPOSE_BACKGROUND = 2; /* Set area too background color */
// precalculated colormap table
std::vector<std::uint32_t> globalCachedColor{};
std::vector<std::uint32_t> localCachedColor{};
// precalculated colormap table
std::vector<std::uint32_t> globalCachedColor{};
std::vector<std::uint32_t> localCachedColor{};
- ColorMapObject* localCachedColorMap{nullptr}; // Weak-pointer of ColorMapObject. should be nullptr if image changed
};
// Forward declaration
};
// Forward declaration
if(gif->Image.ColorMap)
{
colorMap = gif->Image.ColorMap;
if(gif->Image.ColorMap)
{
colorMap = gif->Image.ColorMap;
- // use local cached color map without re-calculate cache.
- if(gifCachedColor.localCachedColorMap == colorMap)
- {
- cachedColorPtr = gifCachedColor.localCachedColor.data();
- }
- // else if w * h is big enough, generate local cached color.
- else if(colorMap->ColorCount * LOCAL_CACHED_COLOR_GENERATE_THRESHOLD < w * h)
+ // if w * h is big enough, generate local cached color.
+ if(colorMap->ColorCount * LOCAL_CACHED_COLOR_GENERATE_THRESHOLD < w * h)
{
gifCachedColor.localCachedColor.resize(colorMap->ColorCount);
for(i = 0; i < colorMap->ColorCount; ++i)
{
gifCachedColor.localCachedColor[i] = PixelLookup(colorMap, i);
}
{
gifCachedColor.localCachedColor.resize(colorMap->ColorCount);
for(i = 0; i < colorMap->ColorCount; ++i)
{
gifCachedColor.localCachedColor[i] = PixelLookup(colorMap, i);
}
- gifCachedColor.localCachedColorMap = colorMap;
cachedColorPtr = gifCachedColor.localCachedColor.data();
}
cachedColorPtr = gifCachedColor.localCachedColor.data();
}
cachedColor.globalCachedColor[i] = PixelLookup(colorMap, i);
}
}
cachedColor.globalCachedColor[i] = PixelLookup(colorMap, i);
}
}
- cachedColor.localCachedColorMap = nullptr;
// no errors in header scan etc. so set err and return value
*error = 0;
// no errors in header scan etc. so set err and return value
*error = 0;