Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 #include "SkMallocPixelRef.h" | 8 #include "SkMallocPixelRef.h" |
| 9 #include "SkBitmap.h" | 9 #include "SkBitmap.h" |
| 10 #include "SkFlattenableBuffers.h" | 10 #include "SkFlattenableBuffers.h" |
| 11 | 11 |
| 12 SkMallocPixelRef::SkMallocPixelRef(void* storage, size_t size, | 12 SkMallocPixelRef::SkMallocPixelRef(const SkImageInfo& info, void* storage, |
| 13 SkColorTable* ctable, bool ownPixels) { | 13 size_t rowBytes, SkColorTable* ctable, bool ownPixels) { |
| 14 size_t size = info.fHeight * rowBytes; | |
| 14 if (NULL == storage) { | 15 if (NULL == storage) { |
| 15 SkASSERT(ownPixels); | 16 SkASSERT(ownPixels); |
| 16 storage = sk_malloc_throw(size); | 17 storage = sk_malloc_throw(size); |
| 17 } | 18 } |
| 18 fStorage = storage; | 19 fStorage = storage; |
| 19 fSize = size; | 20 fInfo = info; |
| 21 fRB = rowBytes; | |
| 20 fCTable = ctable; | 22 fCTable = ctable; |
| 21 SkSafeRef(ctable); | 23 SkSafeRef(ctable); |
| 22 fOwnPixels = ownPixels; | 24 fOwnPixels = ownPixels; |
| 23 | 25 |
| 24 this->setPreLocked(fStorage, fCTable); | 26 this->setPreLocked(fStorage, rowBytes, fCTable); |
| 25 } | 27 } |
| 26 | 28 |
| 27 SkMallocPixelRef::~SkMallocPixelRef() { | 29 SkMallocPixelRef::~SkMallocPixelRef() { |
| 28 SkSafeUnref(fCTable); | 30 SkSafeUnref(fCTable); |
| 29 if (fOwnPixels) { | 31 if (fOwnPixels) { |
| 30 sk_free(fStorage); | 32 sk_free(fStorage); |
| 31 } | 33 } |
| 32 } | 34 } |
| 33 | 35 |
| 34 void* SkMallocPixelRef::onLockPixels(SkColorTable** ct) { | 36 void* SkMallocPixelRef::onLockPixels(SkImageInfo* info, size_t* rowBytes, |
| 37 SkColorTable** ct) { | |
| 38 *info = fInfo; | |
| 39 *rowBytes = fRB; | |
| 35 *ct = fCTable; | 40 *ct = fCTable; |
| 36 return fStorage; | 41 return fStorage; |
| 37 } | 42 } |
| 38 | 43 |
| 39 void SkMallocPixelRef::onUnlockPixels() { | 44 void SkMallocPixelRef::onUnlockPixels() { |
| 40 // nothing to do | 45 // nothing to do |
| 41 } | 46 } |
| 42 | 47 |
| 43 void SkMallocPixelRef::flatten(SkFlattenableWriteBuffer& buffer) const { | 48 void SkMallocPixelRef::flatten(SkFlattenableWriteBuffer& buffer) const { |
| 44 this->INHERITED::flatten(buffer); | 49 this->INHERITED::flatten(buffer); |
| 45 | 50 |
| 46 buffer.writeByteArray(fStorage, fSize); | 51 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)
| |
| 52 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.
| |
| 53 buffer.write32(fInfo.fAlphaType); | |
| 54 buffer.write32(fInfo.fColorType); | |
| 55 | |
| 56 // TODO: replace this bulk write with a chunky one that can trim off any | |
| 57 // trailing bytes on each scanline (in case rowbytes > width*size) | |
| 58 size_t size = this->computeSize(); | |
| 59 buffer.write32(fRB); | |
| 60 buffer.writeByteArray(fStorage, size); | |
| 47 buffer.writeBool(fCTable != NULL); | 61 buffer.writeBool(fCTable != NULL); |
| 48 if (fCTable) { | 62 if (fCTable) { |
| 49 fCTable->writeToBuffer(buffer); | 63 fCTable->writeToBuffer(buffer); |
| 50 } | 64 } |
| 51 } | 65 } |
| 52 | 66 |
| 53 SkMallocPixelRef::SkMallocPixelRef(SkFlattenableReadBuffer& buffer) | 67 SkMallocPixelRef::SkMallocPixelRef(SkFlattenableReadBuffer& buffer) |
| 54 : INHERITED(buffer, NULL) { | 68 : INHERITED(buffer, NULL) { |
| 55 fSize = buffer.getArrayCount(); | 69 fInfo.fWidth = buffer.read32(); |
|
scroggo
2013/11/19 18:17:09
readFromMemory?
reed1
2013/11/20 20:56:56
removed api
| |
| 56 fStorage = sk_malloc_throw(fSize); | 70 fInfo.fHeight = buffer.read32(); |
| 57 buffer.readByteArray(fStorage, fSize); | 71 fInfo.fAlphaType = (SkAlphaType)buffer.read32(); |
| 72 fInfo.fColorType = (SkColorType)buffer.read32(); | |
| 73 | |
| 74 fRB = buffer.read32(); | |
| 75 size_t size = this->computeSize(); | |
| 76 fStorage = sk_malloc_throw(size); | |
| 77 buffer.readByteArray(fStorage, size); | |
| 58 if (buffer.readBool()) { | 78 if (buffer.readBool()) { |
| 59 fCTable = SkNEW_ARGS(SkColorTable, (buffer)); | 79 fCTable = SkNEW_ARGS(SkColorTable, (buffer)); |
| 60 } else { | 80 } else { |
| 61 fCTable = NULL; | 81 fCTable = NULL; |
| 62 } | 82 } |
| 63 fOwnPixels = true; | 83 fOwnPixels = true; |
| 64 | 84 |
| 65 this->setPreLocked(fStorage, fCTable); | 85 this->setPreLocked(fStorage, fRB, fCTable); |
| 66 } | 86 } |
| OLD | NEW |