Index: tests/JpegTest.cpp |
diff --git a/tests/JpegTest.cpp b/tests/JpegTest.cpp |
index f8784a2d26cc3d428ea5394165c55aec3807a4a0..46191eaf2b6e36dfa1f2c7fa513460211016a479 100644 |
--- a/tests/JpegTest.cpp |
+++ b/tests/JpegTest.cpp |
@@ -7,9 +7,12 @@ |
#include "SkBitmap.h" |
#include "SkData.h" |
+#include "SkDecodingImageGenerator.h" |
#include "SkForceLinking.h" |
+#include "SkFrontBufferedStream.h" |
#include "SkImage.h" |
#include "SkImageDecoder.h" |
+#include "SkPixelRef.h" |
#include "SkStream.h" |
#include "Test.h" |
@@ -452,3 +455,44 @@ DEF_TEST(Jpeg, reporter) { |
SkASSERT(writeSuccess); |
#endif |
} |
+ |
+DEF_TEST(Jpeg_YUV, reporter) { |
+ size_t len = sizeof(goodJpegImage); |
+ SkMemoryStream memStream(goodJpegImage, len); |
+ |
+ SkAutoTUnref<SkStreamRewindable> stream(SkFrontBufferedStream::Create(&memStream, len)); |
scroggo
2014/07/18 21:52:41
Why do you need an SkFrontBufferedStream? An SkMem
|
+ SkBitmap bitmap; |
+ SkDecodingImageGenerator::Options opts; |
+ bool pixelsInstalled = SkInstallDiscardablePixelRef( |
+ SkDecodingImageGenerator::Create(stream.detach(), opts), &bitmap); |
+ REPORTER_ASSERT(reporter, pixelsInstalled); |
+ |
+ if (pixelsInstalled) { |
scroggo
2014/07/18 21:52:41
nit: It may be a matter of personal opinion, but y
|
+ SkPixelRef* pixelRef = bitmap.pixelRef(); |
+ SkISize yuvSizes[3]; |
+ bool sizesComputed = (NULL != pixelRef) && pixelRef->getYUV8Planes(yuvSizes, NULL, NULL); |
+ REPORTER_ASSERT(reporter, sizesComputed); |
+ |
+ if (sizesComputed) { |
+ // Allocate the memory for YUV |
+ size_t totalSize(0); |
+ size_t sizes[3], rowBytes[3]; |
+ const int32_t expected_sizes[] = {128, 64, 64}; |
+ for (int i = 0; i < 3; ++i) { |
+ rowBytes[i] = yuvSizes[i].fWidth; |
+ totalSize += sizes[i] = rowBytes[i] * yuvSizes[i].fHeight; |
+ REPORTER_ASSERT(reporter, rowBytes[i] == (size_t)expected_sizes[i]); |
+ REPORTER_ASSERT(reporter, yuvSizes[i].fWidth == expected_sizes[i]); |
+ REPORTER_ASSERT(reporter, yuvSizes[i].fHeight == expected_sizes[i]); |
+ } |
+ SkAutoMalloc storage(totalSize); |
+ void* planes[3]; |
+ planes[0] = storage.get(); |
+ planes[1] = (uint8_t*)planes[0] + sizes[0]; |
+ planes[2] = (uint8_t*)planes[1] + sizes[1]; |
+ |
+ // Get the YUV planes |
+ REPORTER_ASSERT(reporter, pixelRef->getYUV8Planes(yuvSizes, planes, rowBytes)); |
+ } |
+ } |
+} |