| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2008 The Android Open Source Project | 2 * Copyright 2008 The Android Open Source Project |
| 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 #ifndef SkPixelRef_DEFINED | 8 #ifndef SkPixelRef_DEFINED |
| 9 #define SkPixelRef_DEFINED | 9 #define SkPixelRef_DEFINED |
| 10 | 10 |
| 11 #include "../private/SkAtomics.h" | 11 #include "../private/SkAtomics.h" |
| 12 #include "../private/SkMutex.h" | 12 #include "../private/SkMutex.h" |
| 13 #include "../private/SkTDArray.h" | 13 #include "../private/SkTDArray.h" |
| 14 #include "SkBitmap.h" | 14 #include "SkBitmap.h" |
| 15 #include "SkFilterQuality.h" | 15 #include "SkFilterQuality.h" |
| 16 #include "SkImageInfo.h" | 16 #include "SkImageInfo.h" |
| 17 #include "SkPixmap.h" | 17 #include "SkPixmap.h" |
| 18 #include "SkRefCnt.h" | 18 #include "SkRefCnt.h" |
| 19 #include "SkSize.h" | 19 #include "SkSize.h" |
| 20 #include "SkString.h" | 20 #include "SkString.h" |
| 21 #include "SkYUVSizeInfo.h" | |
| 22 | 21 |
| 23 class SkColorTable; | 22 class SkColorTable; |
| 24 class SkData; | 23 class SkData; |
| 25 struct SkIRect; | 24 struct SkIRect; |
| 26 | 25 |
| 27 class GrTexture; | 26 class GrTexture; |
| 28 class SkDiscardableMemory; | 27 class SkDiscardableMemory; |
| 29 | 28 |
| 30 /** \class SkPixelRef | 29 /** \class SkPixelRef |
| 31 | 30 |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 } | 203 } |
| 205 }; | 204 }; |
| 206 | 205 |
| 207 bool requestLock(const LockRequest&, LockResult*); | 206 bool requestLock(const LockRequest&, LockResult*); |
| 208 | 207 |
| 209 /** Are we really wrapping a texture instead of a bitmap? | 208 /** Are we really wrapping a texture instead of a bitmap? |
| 210 */ | 209 */ |
| 211 virtual GrTexture* getTexture() { return NULL; } | 210 virtual GrTexture* getTexture() { return NULL; } |
| 212 | 211 |
| 213 /** | 212 /** |
| 214 * If this can efficiently return YUV data, this should return true. | 213 * If any planes or rowBytes is NULL, this should output the sizes and retu
rn true |
| 215 * Otherwise this returns false and does not modify any of the parameters. | 214 * if it can efficiently return YUV planar data. If it cannot, it should re
turn false. |
| 216 * | 215 * |
| 217 * @param sizeInfo Output parameter indicating the sizes and required | 216 * If all planes and rowBytes are not NULL, then it should copy the associa
ted Y,U,V data |
| 218 * allocation widths of the Y, U, and V planes. | 217 * into those planes of memory supplied by the caller. It should validate t
hat the sizes |
| 219 * @param colorSpace Output parameter. | 218 * match what it expected. If the sizes do not match, it should return fals
e. |
| 219 * |
| 220 * If colorSpace is not NULL, the YUV color space of the data should be sto
red in the address |
| 221 * it points at. |
| 220 */ | 222 */ |
| 221 bool queryYUV8(SkYUVSizeInfo* sizeInfo, SkYUVColorSpace* colorSpace) const { | 223 bool getYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBytes[3], |
| 222 return this->onQueryYUV8(sizeInfo, colorSpace); | 224 SkYUVColorSpace* colorSpace) { |
| 223 } | 225 return this->onGetYUV8Planes(sizes, planes, rowBytes, colorSpace); |
| 224 | |
| 225 /** | |
| 226 * Returns true on success and false on failure. | |
| 227 * Copies YUV data into the provided YUV planes. | |
| 228 * | |
| 229 * @param sizeInfo Needs to exactly match the values returned by the | |
| 230 * query, except the WidthBytes may be larger than the | |
| 231 * recommendation (but not smaller). | |
| 232 * @param planes Memory for each of the Y, U, and V planes. | |
| 233 */ | |
| 234 bool getYUV8Planes(const SkYUVSizeInfo& sizeInfo, void* planes[3]) { | |
| 235 return this->onGetYUV8Planes(sizeInfo, planes); | |
| 236 } | 226 } |
| 237 | 227 |
| 238 /** Populates dst with the pixels of this pixelRef, converting them to color
Type. */ | 228 /** Populates dst with the pixels of this pixelRef, converting them to color
Type. */ |
| 239 bool readPixels(SkBitmap* dst, SkColorType colorType, const SkIRect* subset
= NULL); | 229 bool readPixels(SkBitmap* dst, SkColorType colorType, const SkIRect* subset
= NULL); |
| 240 | 230 |
| 241 /** | 231 /** |
| 242 * Makes a deep copy of this PixelRef, respecting the requested config. | 232 * Makes a deep copy of this PixelRef, respecting the requested config. |
| 243 * @param colorType Desired colortype. | 233 * @param colorType Desired colortype. |
| 244 * @param profileType Desired colorprofiletype. | 234 * @param profileType Desired colorprofiletype. |
| 245 * @param subset Subset of this PixelRef to copy. Must be fully contained w
ithin the bounds of | 235 * @param subset Subset of this PixelRef to copy. Must be fully contained w
ithin the bounds of |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 * The base class implementation returns false; | 301 * The base class implementation returns false; |
| 312 */ | 302 */ |
| 313 virtual bool onReadPixels(SkBitmap* dst, SkColorType colorType, const SkIRec
t* subsetOrNull); | 303 virtual bool onReadPixels(SkBitmap* dst, SkColorType colorType, const SkIRec
t* subsetOrNull); |
| 314 | 304 |
| 315 // default impl returns NULL. | 305 // default impl returns NULL. |
| 316 virtual SkData* onRefEncodedData(); | 306 virtual SkData* onRefEncodedData(); |
| 317 | 307 |
| 318 // default impl does nothing. | 308 // default impl does nothing. |
| 319 virtual void onNotifyPixelsChanged(); | 309 virtual void onNotifyPixelsChanged(); |
| 320 | 310 |
| 321 virtual bool onQueryYUV8(SkYUVSizeInfo*, SkYUVColorSpace*) const { | 311 // default impl returns false. |
| 322 return false; | 312 virtual bool onGetYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBy
tes[3], |
| 323 } | 313 SkYUVColorSpace* colorSpace); |
| 324 virtual bool onGetYUV8Planes(const SkYUVSizeInfo&, void*[3] /*planes*/) { | |
| 325 return false; | |
| 326 } | |
| 327 | 314 |
| 328 /** | 315 /** |
| 329 * Returns the size (in bytes) of the internally allocated memory. | 316 * Returns the size (in bytes) of the internally allocated memory. |
| 330 * This should be implemented in all serializable SkPixelRef derived classe
s. | 317 * This should be implemented in all serializable SkPixelRef derived classe
s. |
| 331 * SkBitmap::fPixelRefOffset + SkBitmap::getSafeSize() should never overflo
w this value, | 318 * SkBitmap::fPixelRefOffset + SkBitmap::getSafeSize() should never overflo
w this value, |
| 332 * otherwise the rendering code may attempt to read memory out of bounds. | 319 * otherwise the rendering code may attempt to read memory out of bounds. |
| 333 * | 320 * |
| 334 * @return default impl returns 0. | 321 * @return default impl returns 0. |
| 335 */ | 322 */ |
| 336 virtual size_t getAllocatedSizeInBytes() const; | 323 virtual size_t getAllocatedSizeInBytes() const; |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 413 /** | 400 /** |
| 414 * Allocate a new pixelref matching the specified ImageInfo, allocating | 401 * Allocate a new pixelref matching the specified ImageInfo, allocating |
| 415 * the memory for the pixels. If the ImageInfo requires a ColorTable, | 402 * the memory for the pixels. If the ImageInfo requires a ColorTable, |
| 416 * the pixelref will ref() the colortable. | 403 * the pixelref will ref() the colortable. |
| 417 * On failure return NULL. | 404 * On failure return NULL. |
| 418 */ | 405 */ |
| 419 virtual SkPixelRef* create(const SkImageInfo&, size_t rowBytes, SkColorTable
*) = 0; | 406 virtual SkPixelRef* create(const SkImageInfo&, size_t rowBytes, SkColorTable
*) = 0; |
| 420 }; | 407 }; |
| 421 | 408 |
| 422 #endif | 409 #endif |
| OLD | NEW |