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; | |
scroggo
2013/07/15 15:09:28
If we move __SK_FORCE_IMAGE_DECODER_LINKING here,
| |
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); | |
sglez
2013/07/13 04:11:27
Leon, why 1024^2? I copied this from what you have
scroggo
2013/07/15 15:09:28
This was arbitrary. I may have based it off of a n
| |
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) { | |
scroggo
2013/07/15 15:09:28
This is not threadsafe. In its current use in our
| |
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 |