OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkMallocPixelRef.h" | 8 #include "SkMallocPixelRef.h" |
9 #include "SkBitmap.h" | 9 #include "SkBitmap.h" |
10 #include "SkReadBuffer.h" | 10 #include "SkReadBuffer.h" |
11 #include "SkWriteBuffer.h" | 11 #include "SkWriteBuffer.h" |
12 | 12 |
13 // assumes ptr was allocated via sk_malloc | 13 // assumes ptr was allocated via sk_malloc |
14 static void sk_free_releaseproc(void* ptr, void*) { | 14 static void sk_free_releaseproc(void* ptr, void*) { |
15 sk_free(ptr); | 15 sk_free(ptr); |
16 } | 16 } |
17 | 17 |
18 static bool is_valid(const SkImageInfo& info, SkColorTable* ctable) { | 18 static bool is_valid(const SkImageInfo& info, SkColorTable* ctable) { |
19 if (info.fWidth < 0 || | 19 if (info.width() < 0 || info.height() < 0 || |
20 info.fHeight < 0 || | 20 (unsigned)info.colorType() > (unsigned)kLastEnum_SkColorType || |
21 (unsigned)info.fColorType > (unsigned)kLastEnum_SkColorType || | 21 (unsigned)info.alphaType() > (unsigned)kLastEnum_SkAlphaType) |
22 (unsigned)info.fAlphaType > (unsigned)kLastEnum_SkAlphaType) | |
23 { | 22 { |
24 return false; | 23 return false; |
25 } | 24 } |
26 | 25 |
27 // these seem like good checks, but currently we have (at least) tests | 26 // these seem like good checks, but currently we have (at least) tests |
28 // that expect the pixelref to succeed even when there is a mismatch | 27 // that expect the pixelref to succeed even when there is a mismatch |
29 // with colortables. fix? | 28 // with colortables. fix? |
30 #if 0 | 29 #if 0 |
31 if (kIndex8_SkColorType == info.fColorType && NULL == ctable) { | 30 if (kIndex8_SkColorType == info.fColorType && NULL == ctable) { |
32 return false; | 31 return false; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 return NULL; // cannot meet requested rowbytes | 64 return NULL; // cannot meet requested rowbytes |
66 } | 65 } |
67 | 66 |
68 int32_t rowBytes; | 67 int32_t rowBytes; |
69 if (requestedRowBytes) { | 68 if (requestedRowBytes) { |
70 rowBytes = SkToS32(requestedRowBytes); | 69 rowBytes = SkToS32(requestedRowBytes); |
71 } else { | 70 } else { |
72 rowBytes = minRB; | 71 rowBytes = minRB; |
73 } | 72 } |
74 | 73 |
75 int64_t bigSize = (int64_t)info.fHeight * rowBytes; | 74 int64_t bigSize = (int64_t)info.height() * rowBytes; |
76 if (!sk_64_isS32(bigSize)) { | 75 if (!sk_64_isS32(bigSize)) { |
77 return NULL; | 76 return NULL; |
78 } | 77 } |
79 | 78 |
80 size_t size = sk_64_asS32(bigSize); | 79 size_t size = sk_64_asS32(bigSize); |
81 SkASSERT(size >= info.getSafeSize(rowBytes)); | 80 SkASSERT(size >= info.getSafeSize(rowBytes)); |
82 void* addr = sk_malloc_flags(size, 0); | 81 void* addr = sk_malloc_flags(size, 0); |
83 if (NULL == addr) { | 82 if (NULL == addr) { |
84 return NULL; | 83 return NULL; |
85 } | 84 } |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 SkMallocPixelRef::SkMallocPixelRef(const SkImageInfo& info, void* storage, | 134 SkMallocPixelRef::SkMallocPixelRef(const SkImageInfo& info, void* storage, |
136 size_t rowBytes, SkColorTable* ctable, | 135 size_t rowBytes, SkColorTable* ctable, |
137 bool ownsPixels) | 136 bool ownsPixels) |
138 : INHERITED(info) | 137 : INHERITED(info) |
139 , fReleaseProc(ownsPixels ? sk_free_releaseproc : NULL) | 138 , fReleaseProc(ownsPixels ? sk_free_releaseproc : NULL) |
140 , fReleaseProcContext(NULL) { | 139 , fReleaseProcContext(NULL) { |
141 // This constructor is now DEPRICATED. | 140 // This constructor is now DEPRICATED. |
142 SkASSERT(is_valid(info, ctable)); | 141 SkASSERT(is_valid(info, ctable)); |
143 SkASSERT(rowBytes >= info.minRowBytes()); | 142 SkASSERT(rowBytes >= info.minRowBytes()); |
144 | 143 |
145 if (kIndex_8_SkColorType != info.fColorType) { | 144 if (kIndex_8_SkColorType != info.colorType()) { |
146 ctable = NULL; | 145 ctable = NULL; |
147 } | 146 } |
148 | 147 |
149 fStorage = storage; | 148 fStorage = storage; |
150 fCTable = ctable; | 149 fCTable = ctable; |
151 fRB = rowBytes; | 150 fRB = rowBytes; |
152 SkSafeRef(ctable); | 151 SkSafeRef(ctable); |
153 | 152 |
154 this->setPreLocked(fStorage, rowBytes, fCTable); | 153 this->setPreLocked(fStorage, rowBytes, fCTable); |
155 } | 154 } |
156 | 155 |
157 SkMallocPixelRef::SkMallocPixelRef(const SkImageInfo& info, void* storage, | 156 SkMallocPixelRef::SkMallocPixelRef(const SkImageInfo& info, void* storage, |
158 size_t rowBytes, SkColorTable* ctable, | 157 size_t rowBytes, SkColorTable* ctable, |
159 SkMallocPixelRef::ReleaseProc proc, | 158 SkMallocPixelRef::ReleaseProc proc, |
160 void* context) | 159 void* context) |
161 : INHERITED(info) | 160 : INHERITED(info) |
162 , fReleaseProc(proc) | 161 , fReleaseProc(proc) |
163 , fReleaseProcContext(context) | 162 , fReleaseProcContext(context) |
164 { | 163 { |
165 SkASSERT(is_valid(info, ctable)); | 164 SkASSERT(is_valid(info, ctable)); |
166 SkASSERT(rowBytes >= info.minRowBytes()); | 165 SkASSERT(rowBytes >= info.minRowBytes()); |
167 | 166 |
168 if (kIndex_8_SkColorType != info.fColorType) { | 167 if (kIndex_8_SkColorType != info.colorType()) { |
169 ctable = NULL; | 168 ctable = NULL; |
170 } | 169 } |
171 | 170 |
172 fStorage = storage; | 171 fStorage = storage; |
173 fCTable = ctable; | 172 fCTable = ctable; |
174 fRB = rowBytes; | 173 fRB = rowBytes; |
175 SkSafeRef(ctable); | 174 SkSafeRef(ctable); |
176 | 175 |
177 this->setPreLocked(fStorage, rowBytes, fCTable); | 176 this->setPreLocked(fStorage, rowBytes, fCTable); |
178 } | 177 } |
(...skipping 20 matching lines...) Expand all Loading... |
199 size_t SkMallocPixelRef::getAllocatedSizeInBytes() const { | 198 size_t SkMallocPixelRef::getAllocatedSizeInBytes() const { |
200 return this->info().getSafeSize(fRB); | 199 return this->info().getSafeSize(fRB); |
201 } | 200 } |
202 | 201 |
203 /////////////////////////////////////////////////////////////////////////////// | 202 /////////////////////////////////////////////////////////////////////////////// |
204 | 203 |
205 SkPixelRef* SkMallocPixelRef::PRFactory::create(const SkImageInfo& info, size_t
rowBytes, | 204 SkPixelRef* SkMallocPixelRef::PRFactory::create(const SkImageInfo& info, size_t
rowBytes, |
206 SkColorTable* ctable) { | 205 SkColorTable* ctable) { |
207 return SkMallocPixelRef::NewAllocate(info, rowBytes, ctable); | 206 return SkMallocPixelRef::NewAllocate(info, rowBytes, ctable); |
208 } | 207 } |
OLD | NEW |