Chromium Code Reviews| Index: src/core/SkMallocPixelRef.cpp |
| diff --git a/src/core/SkMallocPixelRef.cpp b/src/core/SkMallocPixelRef.cpp |
| index f229e9de34d0fa8dbdd29304dd0ac0f7a78e5611..2ca56f10ac2ed567b301cbf942226cae9f13b1f6 100644 |
| --- a/src/core/SkMallocPixelRef.cpp |
| +++ b/src/core/SkMallocPixelRef.cpp |
| @@ -9,19 +9,21 @@ |
| #include "SkBitmap.h" |
| #include "SkFlattenableBuffers.h" |
| -SkMallocPixelRef::SkMallocPixelRef(void* storage, size_t size, |
| - SkColorTable* ctable, bool ownPixels) { |
| +SkMallocPixelRef::SkMallocPixelRef(const SkImageInfo& info, void* storage, |
| + size_t rowBytes, SkColorTable* ctable, bool ownPixels) { |
| + size_t size = info.fHeight * rowBytes; |
| if (NULL == storage) { |
| SkASSERT(ownPixels); |
| storage = sk_malloc_throw(size); |
| } |
| fStorage = storage; |
| - fSize = size; |
| + fInfo = info; |
| + fRB = rowBytes; |
| fCTable = ctable; |
| SkSafeRef(ctable); |
| fOwnPixels = ownPixels; |
| - this->setPreLocked(fStorage, fCTable); |
| + this->setPreLocked(fStorage, rowBytes, fCTable); |
| } |
| SkMallocPixelRef::~SkMallocPixelRef() { |
| @@ -31,7 +33,10 @@ SkMallocPixelRef::~SkMallocPixelRef() { |
| } |
| } |
| -void* SkMallocPixelRef::onLockPixels(SkColorTable** ct) { |
| +void* SkMallocPixelRef::onLockPixels(SkImageInfo* info, size_t* rowBytes, |
| + SkColorTable** ct) { |
| + *info = fInfo; |
| + *rowBytes = fRB; |
| *ct = fCTable; |
| return fStorage; |
| } |
| @@ -43,7 +48,16 @@ void SkMallocPixelRef::onUnlockPixels() { |
| void SkMallocPixelRef::flatten(SkFlattenableWriteBuffer& buffer) const { |
| this->INHERITED::flatten(buffer); |
| - buffer.writeByteArray(fStorage, fSize); |
| + buffer.write32(fInfo.fWidth); |
|
scroggo
2013/11/19 18:17:09
SkImageInfo::writeToMemory?
reed1
2013/11/20 20:56:56
removed (for now at least. only one caller)
|
| + buffer.write32(fInfo.fHeight); |
|
scroggo
2013/11/19 18:17:09
This will require a change to the picture format.
reed1
2013/11/20 20:56:56
indeed. I'll update the picvers code next.
|
| + buffer.write32(fInfo.fAlphaType); |
| + buffer.write32(fInfo.fColorType); |
| + |
| + // TODO: replace this bulk write with a chunky one that can trim off any |
| + // trailing bytes on each scanline (in case rowbytes > width*size) |
| + size_t size = this->computeSize(); |
| + buffer.write32(fRB); |
| + buffer.writeByteArray(fStorage, size); |
| buffer.writeBool(fCTable != NULL); |
| if (fCTable) { |
| fCTable->writeToBuffer(buffer); |
| @@ -52,9 +66,15 @@ void SkMallocPixelRef::flatten(SkFlattenableWriteBuffer& buffer) const { |
| SkMallocPixelRef::SkMallocPixelRef(SkFlattenableReadBuffer& buffer) |
| : INHERITED(buffer, NULL) { |
| - fSize = buffer.getArrayCount(); |
| - fStorage = sk_malloc_throw(fSize); |
| - buffer.readByteArray(fStorage, fSize); |
| + fInfo.fWidth = buffer.read32(); |
|
scroggo
2013/11/19 18:17:09
readFromMemory?
reed1
2013/11/20 20:56:56
removed api
|
| + fInfo.fHeight = buffer.read32(); |
| + fInfo.fAlphaType = (SkAlphaType)buffer.read32(); |
| + fInfo.fColorType = (SkColorType)buffer.read32(); |
| + |
| + fRB = buffer.read32(); |
| + size_t size = this->computeSize(); |
| + fStorage = sk_malloc_throw(size); |
| + buffer.readByteArray(fStorage, size); |
| if (buffer.readBool()) { |
| fCTable = SkNEW_ARGS(SkColorTable, (buffer)); |
| } else { |
| @@ -62,5 +82,5 @@ SkMallocPixelRef::SkMallocPixelRef(SkFlattenableReadBuffer& buffer) |
| } |
| fOwnPixels = true; |
| - this->setPreLocked(fStorage, fCTable); |
| + this->setPreLocked(fStorage, fRB, fCTable); |
| } |