Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(191)

Side by Side Diff: src/core/SkMallocPixelRef.cpp

Issue 68973005: Expand pixelref to return SkImageInfo and rowbytes (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698