aboutsummaryrefslogtreecommitdiffstats
path: root/src/images/SkImageRef.cpp
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2009-03-18 17:39:44 -0700
committerThe Android Open Source Project <initial-contribution@android.com>2009-03-18 17:39:44 -0700
commitaf527e02dce280c269d751322e9f60aac8cb97da (patch)
tree19faf6d47cdd3d589a6dfcff0f8f75fcbb03aa20 /src/images/SkImageRef.cpp
parent5956d1c224aadf1d2712b46b32d3fc69a19915bd (diff)
downloadexternal_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.cpp23
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);