Index: include/core/SkPixelRef.h |
diff --git a/include/core/SkPixelRef.h b/include/core/SkPixelRef.h |
index 109d3c911e94160569b9bda4fae9ac5cd6ecf313..079422386b6072d0fdc048a2b30ef92841e046e6 100644 |
--- a/include/core/SkPixelRef.h |
+++ b/include/core/SkPixelRef.h |
@@ -232,6 +232,7 @@ public: |
*/ |
virtual GrTexture* getTexture() { return NULL; } |
+#ifdef SK_SUPPORT_LEGACY_IMAGEGENERATOR_YUV_API |
/** |
* If any planes or rowBytes is NULL, this should output the sizes and return true |
* if it can efficiently return YUV planar data. If it cannot, it should return false. |
@@ -247,6 +248,40 @@ public: |
SkYUVColorSpace* colorSpace) { |
return this->onGetYUV8Planes(sizes, planes, rowBytes, colorSpace); |
} |
+#endif |
+ |
+ /** |
+ * If this pixelref supports returning planar YUV data, return true, and return |
+ * the logicalSizes (if not NULL) and the optimalAllocationSizes (if not NULL), where each |
+ * array represents [0]=Y, [1]=U, [2]=V |
+ * |
+ * The optimalAllocationSizes may be the same as the logicalSizes, but they may also be larger |
+ * if that will aid the pixelref (for performance). |
+ * |
+ * If this returns false, the value of the (optional) sizes parameters is undefined. |
+ */ |
+ bool queryYUV8(SkISize logicalSizes[3], SkISize optimalAllocationSizes[3]) { |
+ return this->onQueryYUV8(logicalSizes, optimalAllocationSizes); |
+ } |
+ |
+ /** |
+ * If this pixelref supports returning planar YUV data, and can fulfill the requested |
+ * sizes for each plane, return true and write the YUV data into the planes. |
+ * |
+ * Calling queryYUV8() will return both the logical sizes (W/H) and the optimal-allocation |
+ * sizes for the 3 planes. For getYUV8(), tt is legal to pass the logical sizes |
+ * (though smaller than those will return false). However, this may |
+ * (depending on the implementation) be slower than passing in the optimal-allocation sizes |
+ * (or larger). The extra space may allow the implementation to run faster at the cost of |
+ * slightly more ram being allocated. There should be no performance penalty for the |
+ * allocationSizes to larger than the values in optimalAllocationSizes, as they are just the |
+ * minimum sizes for best performance. |
+ * |
+ * If colorSpace is not NULL, return the corresponding colorSpace for the YUV data. |
+ */ |
+ bool getYUV8(const SkISize allocationSizes[3], void* planes[3], SkYUVColorSpace* colorSpace) { |
+ return this->onGetYUV8(allocationSizes, planes, colorSpace); |
+ } |
bool readPixels(SkBitmap* dst, const SkIRect* subset = NULL); |
@@ -335,9 +370,20 @@ protected: |
// default impl returns NULL. |
virtual SkData* onRefEncodedData(); |
- // default impl returns false. |
+ virtual bool onQueryYUV8(SkISize logicalSizes[3], SkISize optimalAllocationSizes[3]) { |
+ return false; |
+ } |
+ |
+ virtual bool onGetYUV8(const SkISize sizes[3], void* planes[3], SkYUVColorSpace*) { |
+ return false; |
+ } |
+ |
+#ifdef SK_SUPPORT_LEGACY_IMAGEGENERATOR_YUV_API |
virtual bool onGetYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBytes[3], |
- SkYUVColorSpace* colorSpace); |
+ SkYUVColorSpace* colorSpace) { |
+ return false; |
+ } |
+#endif |
/** |
* Returns the size (in bytes) of the internally allocated memory. |