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 |