diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-18 17:39:44 -0700 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-18 17:39:44 -0700 |
commit | af527e02dce280c269d751322e9f60aac8cb97da (patch) | |
tree | 19faf6d47cdd3d589a6dfcff0f8f75fcbb03aa20 /src/images/SkImageRef.cpp | |
parent | 5956d1c224aadf1d2712b46b32d3fc69a19915bd (diff) | |
download | external_skia-af527e02dce280c269d751322e9f60aac8cb97da.zip external_skia-af527e02dce280c269d751322e9f60aac8cb97da.tar.gz external_skia-af527e02dce280c269d751322e9f60aac8cb97da.tar.bz2 |
auto import from //branches/cupcake_rel/...@140373
Diffstat (limited to 'src/images/SkImageRef.cpp')
-rw-r--r-- | src/images/SkImageRef.cpp | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/images/SkImageRef.cpp b/src/images/SkImageRef.cpp index 90c37b6..0865c88 100644 --- a/src/images/SkImageRef.cpp +++ b/src/images/SkImageRef.cpp @@ -15,12 +15,12 @@ SkImageRef::SkImageRef(SkStream* stream, SkBitmap::Config config, int sampleSize) : SkPixelRef(&gImageRefMutex), fErrorInDecoding(false) { SkASSERT(stream); - SkASSERT(1 == stream->getRefCnt()); - + stream->ref(); fStream = stream; fConfig = config; fSampleSize = sampleSize; fPrev = fNext = NULL; + fFactory = NULL; #ifdef DUMP_IMAGEREF_LIFECYCLE SkDebugf("add ImageRef %p [%d] data=%d\n", @@ -36,7 +36,8 @@ SkImageRef::~SkImageRef() { this, fConfig, (int)fStream->getLength()); #endif - delete fStream; + fStream->unref(); + fFactory->safeUnref(); } bool SkImageRef::getInfo(SkBitmap* bitmap) { @@ -53,6 +54,12 @@ bool SkImageRef::getInfo(SkBitmap* bitmap) { return true; } +SkImageDecoderFactory* SkImageRef::setDecoderFactory( + SkImageDecoderFactory* fact) { + SkRefCnt_SafeAssign(fFactory, fact); + return fact; +} + /////////////////////////////////////////////////////////////////////////////// bool SkImageRef::onDecode(SkImageDecoder* codec, SkStream* stream, @@ -85,8 +92,14 @@ bool SkImageRef::prepareBitmap(SkImageDecoder::Mode mode) { SkASSERT(fBitmap.getPixels() == NULL); fStream->rewind(); - - SkImageDecoder* codec = SkImageDecoder::Factory(fStream); + + SkImageDecoder* codec; + if (fFactory) { + codec = fFactory->newDecoder(fStream); + } else { + codec = SkImageDecoder::Factory(fStream); + } + if (codec) { SkAutoTDelete<SkImageDecoder> ad(codec); |