| Index: src/images/SkImageDecoder.cpp
|
| diff --git a/src/images/SkImageDecoder.cpp b/src/images/SkImageDecoder.cpp
|
| index 5d94bb1c2db97efd618320213210ef91ee363329..9b8ae726acb26938d605244b0ccf34e8debe2fa7 100644
|
| --- a/src/images/SkImageDecoder.cpp
|
| +++ b/src/images/SkImageDecoder.cpp
|
| @@ -8,12 +8,16 @@
|
|
|
| #include "SkImageDecoder.h"
|
| #include "SkBitmap.h"
|
| +#include "SkData.h"
|
| +#include "SkForceLinking.h"
|
| #include "SkImagePriv.h"
|
| #include "SkPixelRef.h"
|
| #include "SkStream.h"
|
| #include "SkTemplates.h"
|
| #include "SkCanvas.h"
|
|
|
| +__SK_FORCE_IMAGE_DECODER_LINKING;
|
| +
|
| SK_DEFINE_INST_COUNT(SkImageDecoder::Peeker)
|
| SK_DEFINE_INST_COUNT(SkImageDecoder::Chooser)
|
| SK_DEFINE_INST_COUNT(SkImageDecoderFactory)
|
| @@ -280,6 +284,22 @@ bool SkImageDecoder::DecodeFile(const char file[], SkBitmap* bm,
|
| return false;
|
| }
|
|
|
| +SkLruImageCache SkImageDecoder::fLruImageCache(1024*1024);
|
| +SkBitmapFactory SkImageDecoder::fLazyBitmapFactory(&SkImageDecoder::DecodeMemoryToTarget);
|
| +
|
| +bool SkImageDecoder::LazyDecodeBitmap(const void* buffer, size_t size, SkBitmap* bitmap) {
|
| + void* copiedBuffer = sk_malloc_throw(size);
|
| + memcpy(copiedBuffer, buffer, size);
|
| + SkAutoDataUnref data(SkData::NewFromMalloc(copiedBuffer, size));
|
| +
|
| + static bool gOnce;
|
| + if (!gOnce) {
|
| + fLazyBitmapFactory.setImageCache(&fLruImageCache);
|
| + gOnce = true;
|
| + }
|
| + return fLazyBitmapFactory.installPixelRef(data, bitmap);
|
| +}
|
| +
|
| bool SkImageDecoder::DecodeMemory(const void* buffer, size_t size, SkBitmap* bm,
|
| SkBitmap::Config pref, Mode mode, Format* format) {
|
| if (0 == size) {
|
|
|