| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 | 8 |
| 9 #include "SkImageDecoder.h" | 9 #include "SkImageDecoder.h" |
| 10 #include "SkBitmap.h" | 10 #include "SkBitmap.h" |
| 11 #include "SkData.h" |
| 12 #include "SkForceLinking.h" |
| 11 #include "SkImagePriv.h" | 13 #include "SkImagePriv.h" |
| 12 #include "SkPixelRef.h" | 14 #include "SkPixelRef.h" |
| 13 #include "SkStream.h" | 15 #include "SkStream.h" |
| 14 #include "SkTemplates.h" | 16 #include "SkTemplates.h" |
| 15 #include "SkCanvas.h" | 17 #include "SkCanvas.h" |
| 16 | 18 |
| 19 __SK_FORCE_IMAGE_DECODER_LINKING; |
| 20 |
| 17 SK_DEFINE_INST_COUNT(SkImageDecoder::Peeker) | 21 SK_DEFINE_INST_COUNT(SkImageDecoder::Peeker) |
| 18 SK_DEFINE_INST_COUNT(SkImageDecoder::Chooser) | 22 SK_DEFINE_INST_COUNT(SkImageDecoder::Chooser) |
| 19 SK_DEFINE_INST_COUNT(SkImageDecoderFactory) | 23 SK_DEFINE_INST_COUNT(SkImageDecoderFactory) |
| 20 | 24 |
| 21 static SkBitmap::Config gDeviceConfig = SkBitmap::kNo_Config; | 25 static SkBitmap::Config gDeviceConfig = SkBitmap::kNo_Config; |
| 22 | 26 |
| 23 SkBitmap::Config SkImageDecoder::GetDeviceConfig() | 27 SkBitmap::Config SkImageDecoder::GetDeviceConfig() |
| 24 { | 28 { |
| 25 return gDeviceConfig; | 29 return gDeviceConfig; |
| 26 } | 30 } |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(file)); | 277 SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(file)); |
| 274 if (stream.get()) { | 278 if (stream.get()) { |
| 275 if (SkImageDecoder::DecodeStream(stream, bm, pref, mode, format)) { | 279 if (SkImageDecoder::DecodeStream(stream, bm, pref, mode, format)) { |
| 276 bm->pixelRef()->setURI(file); | 280 bm->pixelRef()->setURI(file); |
| 277 return true; | 281 return true; |
| 278 } | 282 } |
| 279 } | 283 } |
| 280 return false; | 284 return false; |
| 281 } | 285 } |
| 282 | 286 |
| 287 SkLruImageCache SkImageDecoder::fLruImageCache(1024*1024); |
| 288 SkBitmapFactory SkImageDecoder::fLazyBitmapFactory(&SkImageDecoder::DecodeMemory
ToTarget); |
| 289 |
| 290 bool SkImageDecoder::LazyDecodeBitmap(const void* buffer, size_t size, SkBitmap*
bitmap) { |
| 291 void* copiedBuffer = sk_malloc_throw(size); |
| 292 memcpy(copiedBuffer, buffer, size); |
| 293 SkAutoDataUnref data(SkData::NewFromMalloc(copiedBuffer, size)); |
| 294 |
| 295 static bool gOnce; |
| 296 if (!gOnce) { |
| 297 fLazyBitmapFactory.setImageCache(&fLruImageCache); |
| 298 gOnce = true; |
| 299 } |
| 300 return fLazyBitmapFactory.installPixelRef(data, bitmap); |
| 301 } |
| 302 |
| 283 bool SkImageDecoder::DecodeMemory(const void* buffer, size_t size, SkBitmap* bm, | 303 bool SkImageDecoder::DecodeMemory(const void* buffer, size_t size, SkBitmap* bm, |
| 284 SkBitmap::Config pref, Mode mode, Format* format) { | 304 SkBitmap::Config pref, Mode mode, Format* format) { |
| 285 if (0 == size) { | 305 if (0 == size) { |
| 286 return false; | 306 return false; |
| 287 } | 307 } |
| 288 SkASSERT(buffer); | 308 SkASSERT(buffer); |
| 289 | 309 |
| 290 SkMemoryStream stream(buffer, size); | 310 SkMemoryStream stream(buffer, size); |
| 291 return SkImageDecoder::DecodeStream(&stream, bm, pref, mode, format); | 311 return SkImageDecoder::DecodeStream(&stream, bm, pref, mode, format); |
| 292 } | 312 } |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 454 if (kUnknown_Format == *format) { | 474 if (kUnknown_Format == *format) { |
| 455 if (stream->rewind()) { | 475 if (stream->rewind()) { |
| 456 *format = GetStreamFormat(stream); | 476 *format = GetStreamFormat(stream); |
| 457 } | 477 } |
| 458 } | 478 } |
| 459 } | 479 } |
| 460 delete codec; | 480 delete codec; |
| 461 } | 481 } |
| 462 return success; | 482 return success; |
| 463 } | 483 } |
| OLD | NEW |