Index: src/images/SkImageRef.cpp |
diff --git a/src/images/SkImageRef.cpp b/src/images/SkImageRef.cpp |
index 1a8284bdd4a6e730da950ce244355867295cb0de..99782c45c08bf5faaa91006e34f489bbb0438f38 100644 |
--- a/src/images/SkImageRef.cpp |
+++ b/src/images/SkImageRef.cpp |
@@ -15,16 +15,14 @@ |
//#define DUMP_IMAGEREF_LIFECYCLE |
- |
/////////////////////////////////////////////////////////////////////////////// |
-SkImageRef::SkImageRef(SkStreamRewindable* stream, SkBitmap::Config config, |
+SkImageRef::SkImageRef(const SkImageInfo& info, SkStreamRewindable* stream, |
int sampleSize, SkBaseMutex* mutex) |
- : SkPixelRef(mutex), fErrorInDecoding(false) { |
+ : INHERITED(info, mutex), fErrorInDecoding(false) { |
SkASSERT(stream); |
stream->ref(); |
fStream = stream; |
- fConfig = config; |
fSampleSize = sampleSize; |
fDoDither = true; |
fPrev = fNext = NULL; |
@@ -40,7 +38,7 @@ SkImageRef::~SkImageRef() { |
#ifdef DUMP_IMAGEREF_LIFECYCLE |
SkDebugf("delete ImageRef %p [%d] data=%d\n", |
- this, fConfig, (int)fStream->getLength()); |
+ this, this->info().fColorType, (int)fStream->getLength()); |
#endif |
fStream->unref(); |
@@ -92,14 +90,6 @@ bool SkImageRef::prepareBitmap(SkImageDecoder::Mode mode) { |
return false; |
} |
- /* As soon as we really know our config, we record it, so that on |
- subsequent calls to the codec, we are sure we will always get the same |
- result. |
- */ |
- if (SkBitmap::kNo_Config != fBitmap.config()) { |
- fConfig = fBitmap.config(); |
- } |
- |
if (NULL != fBitmap.getPixels() || |
(SkBitmap::kNo_Config != fBitmap.config() && |
SkImageDecoder::kDecodeBounds_Mode == mode)) { |
@@ -125,7 +115,7 @@ bool SkImageRef::prepareBitmap(SkImageDecoder::Mode mode) { |
codec->setSampleSize(fSampleSize); |
codec->setDitherImage(fDoDither); |
- if (this->onDecode(codec, fStream, &fBitmap, fConfig, mode)) { |
+ if (this->onDecode(codec, fStream, &fBitmap, fBitmap.config(), mode)) { |
return true; |
} |
} |
@@ -143,15 +133,18 @@ bool SkImageRef::prepareBitmap(SkImageDecoder::Mode mode) { |
return false; |
} |
-void* SkImageRef::onLockPixels(SkColorTable** ct) { |
+bool SkImageRef::onNewLockPixels(LockRec* rec) { |
if (NULL == fBitmap.getPixels()) { |
(void)this->prepareBitmap(SkImageDecoder::kDecodePixels_Mode); |
} |
- if (ct) { |
- *ct = fBitmap.getColorTable(); |
+ if (NULL == fBitmap.getPixels()) { |
+ return false; |
} |
- return fBitmap.getPixels(); |
+ rec->fPixels = fBitmap.getPixels(); |
+ rec->fColorTable = NULL; |
+ rec->fRowBytes = fBitmap.rowBytes(); |
+ return true; |
} |
size_t SkImageRef::ramUsed() const { |
@@ -170,7 +163,6 @@ size_t SkImageRef::ramUsed() const { |
SkImageRef::SkImageRef(SkFlattenableReadBuffer& buffer, SkBaseMutex* mutex) |
: INHERITED(buffer, mutex), fErrorInDecoding(false) { |
- fConfig = (SkBitmap::Config)buffer.readUInt(); |
fSampleSize = buffer.readInt(); |
fDoDither = buffer.readBool(); |
@@ -185,7 +177,6 @@ SkImageRef::SkImageRef(SkFlattenableReadBuffer& buffer, SkBaseMutex* mutex) |
void SkImageRef::flatten(SkFlattenableWriteBuffer& buffer) const { |
this->INHERITED::flatten(buffer); |
- buffer.writeUInt(fConfig); |
buffer.writeInt(fSampleSize); |
buffer.writeBool(fDoDither); |
// FIXME: Consider moving this logic should go into writeStream itself. |