Reland: Widen internal API to support more complex YUV formats

Bug: skia:7901
Change-Id: Ic83e9f0c2a493335671fe431ffba6f649812d406
Reviewed-on: https://skia-review.googlesource.com/c/163481
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
diff --git a/tests/ImageGeneratorTest.cpp b/tests/ImageGeneratorTest.cpp
index 5c8864e..907efc0 100644
--- a/tests/ImageGeneratorTest.cpp
+++ b/tests/ImageGeneratorTest.cpp
@@ -7,9 +7,11 @@
 
 #include "SkData.h"
 #include "SkCanvas.h"
+
 #include "SkGraphics.h"
 #include "SkImageGenerator.h"
 #include "SkImageInfoPriv.h"
+#include "SkYUVAIndex.h"
 #include "Test.h"
 
 #if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS)
@@ -61,24 +63,32 @@
 DEF_TEST(ImageGenerator, reporter) {
     MyImageGenerator ig;
     SkYUVSizeInfo sizeInfo;
-    sizeInfo.fSizes[SkYUVSizeInfo::kY] = SkISize::Make(200, 200);
-    sizeInfo.fSizes[SkYUVSizeInfo::kU] = SkISize::Make(100, 100);
-    sizeInfo.fSizes[SkYUVSizeInfo::kV] = SkISize::Make( 50,  50);
-    sizeInfo.fWidthBytes[SkYUVSizeInfo::kY] = 0;
-    sizeInfo.fWidthBytes[SkYUVSizeInfo::kU] = 0;
-    sizeInfo.fWidthBytes[SkYUVSizeInfo::kV] = 0;
-    void* planes[3] = { nullptr };
+    sizeInfo.fSizes[0] = SkISize::Make(200, 200);
+    sizeInfo.fSizes[1] = SkISize::Make(100, 100);
+    sizeInfo.fSizes[2] = SkISize::Make( 50,  50);
+    sizeInfo.fSizes[3] = SkISize::Make( 25,  25);
+    sizeInfo.fWidthBytes[0] = 0;
+    sizeInfo.fWidthBytes[1] = 0;
+    sizeInfo.fWidthBytes[2] = 0;
+    sizeInfo.fWidthBytes[3] = 0;
+    void* planes[4] = { nullptr };
+    SkYUVAIndex yuvaIndices[4];
     SkYUVColorSpace colorSpace;
 
     // Check that the YUV decoding API does not cause any crashes
-    ig.queryYUV8(&sizeInfo, nullptr);
-    ig.queryYUV8(&sizeInfo, &colorSpace);
-    sizeInfo.fWidthBytes[SkYUVSizeInfo::kY] = 250;
-    sizeInfo.fWidthBytes[SkYUVSizeInfo::kU] = 250;
-    sizeInfo.fWidthBytes[SkYUVSizeInfo::kV] = 250;
+    ig.queryYUVA8(&sizeInfo, yuvaIndices, nullptr);
+    ig.queryYUVA8(&sizeInfo, yuvaIndices, &colorSpace);
+    sizeInfo.fWidthBytes[0] = 250;
+    sizeInfo.fWidthBytes[1] = 250;
+    sizeInfo.fWidthBytes[2] = 250;
+    sizeInfo.fWidthBytes[3] = 250;
+    yuvaIndices[0] = { 0, SkColorChannel::kR };
+    yuvaIndices[1] = { 1, SkColorChannel::kR };
+    yuvaIndices[2] = { 2, SkColorChannel::kR };
+    yuvaIndices[3] = { 3, SkColorChannel::kR };
     int dummy;
-    planes[SkYUVSizeInfo::kY] = planes[SkYUVSizeInfo::kU] = planes[SkYUVSizeInfo::kV] = &dummy;
-    ig.getYUV8Planes(sizeInfo, planes);
+    planes[0] = planes[1] = planes[2] = planes[3] = &dummy;
+    ig.getYUVA8Planes(sizeInfo, yuvaIndices, planes);
 
     // Suppressed due to https://code.google.com/p/skia/issues/detail?id=4339
     if (false) {