From 829caa2f6b3f021197b27a041355e4410626ef3e Mon Sep 17 00:00:00 2001 From: msarett Date: Thu, 11 Feb 2016 14:17:17 -0800 Subject: Delete SkDecodingImageGenerator BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1692053002 Review URL: https://codereview.chromium.org/1692053002 --- tests/YUVTest.cpp | 121 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 tests/YUVTest.cpp (limited to 'tests/YUVTest.cpp') diff --git a/tests/YUVTest.cpp b/tests/YUVTest.cpp new file mode 100644 index 0000000000..09b6f2a7ef --- /dev/null +++ b/tests/YUVTest.cpp @@ -0,0 +1,121 @@ +/* + * Copyright 2013 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "SkCodec.h" +#include "Resources.h" +#include "SkStream.h" +#include "SkTemplates.h" +#include "Test.h" + +static SkStreamAsset* resource(const char path[]) { + SkString fullPath = GetResourcePath(path); + return SkStream::NewFromFile(fullPath.c_str()); +} + +static void codec_yuv(skiatest::Reporter* reporter, + const char path[], + SkISize expectedSizes[3]) { + SkAutoTDelete stream(resource(path)); + if (!stream) { + SkDebugf("Missing resource '%s'\n", path); + return; + } + SkAutoTDelete codec(SkCodec::NewFromStream(stream.detach())); + REPORTER_ASSERT(reporter, codec); + if (!codec) { + return; + } + + // Test queryYUV8() + SkCodec::YUVSizeInfo info; + bool success = codec->queryYUV8(nullptr, nullptr); + REPORTER_ASSERT(reporter, !success); + success = codec->queryYUV8(&info, nullptr); + REPORTER_ASSERT(reporter, (expectedSizes == nullptr) == !success); + if (!success) { + return; + } + REPORTER_ASSERT(reporter, + 0 == memcmp((const void*) &info, (const void*) expectedSizes, 3 * sizeof(SkISize))); + REPORTER_ASSERT(reporter, info.fYWidthBytes == (uint32_t) SkAlign8(info.fYSize.width())); + REPORTER_ASSERT(reporter, info.fUWidthBytes == (uint32_t) SkAlign8(info.fUSize.width())); + REPORTER_ASSERT(reporter, info.fVWidthBytes == (uint32_t) SkAlign8(info.fVSize.width())); + SkYUVColorSpace colorSpace; + success = codec->queryYUV8(&info, &colorSpace); + REPORTER_ASSERT(reporter, + 0 == memcmp((const void*) &info, (const void*) expectedSizes, 3 * sizeof(SkISize))); + REPORTER_ASSERT(reporter, info.fYWidthBytes == (uint32_t) SkAlign8(info.fYSize.width())); + REPORTER_ASSERT(reporter, info.fUWidthBytes == (uint32_t) SkAlign8(info.fUSize.width())); + REPORTER_ASSERT(reporter, info.fVWidthBytes == (uint32_t) SkAlign8(info.fVSize.width())); + REPORTER_ASSERT(reporter, kJPEG_SkYUVColorSpace == colorSpace); + + // Allocate the memory for the YUV decode + size_t totalBytes = info.fYWidthBytes * info.fYSize.height() + + info.fUWidthBytes * info.fUSize.height() + + info.fVWidthBytes * info.fVSize.height(); + SkAutoMalloc storage(totalBytes); + void* planes[3]; + planes[0] = storage.get(); + planes[1] = SkTAddOffset(planes[0], info.fYWidthBytes * info.fYSize.height()); + planes[2] = SkTAddOffset(planes[1], info.fUWidthBytes * info.fUSize.height()); + + // Test getYUV8Planes() + REPORTER_ASSERT(reporter, SkCodec::kInvalidInput == + codec->getYUV8Planes(info, nullptr)); + REPORTER_ASSERT(reporter, SkCodec::kSuccess == + codec->getYUV8Planes(info, planes)); +} + +DEF_TEST(Jpeg_YUV_Codec, r) { + SkISize sizes[3]; + + sizes[0].set(128, 128); + sizes[1].set(64, 64); + sizes[2].set(64, 64); + codec_yuv(r, "color_wheel.jpg", sizes); + + // H2V2 + sizes[0].set(512, 512); + sizes[1].set(256, 256); + sizes[2].set(256, 256); + codec_yuv(r, "mandrill_512_q075.jpg", sizes); + + // H1V1 + sizes[1].set(512, 512); + sizes[2].set(512, 512); + codec_yuv(r, "mandrill_h1v1.jpg", sizes); + + // H2V1 + sizes[1].set(256, 512); + sizes[2].set(256, 512); + codec_yuv(r, "mandrill_h2v1.jpg", sizes); + + // Non-power of two dimensions + sizes[0].set(439, 154); + sizes[1].set(220, 77); + sizes[2].set(220, 77); + codec_yuv(r, "cropped_mandrill.jpg", sizes); + + sizes[0].set(8, 8); + sizes[1].set(4, 4); + sizes[2].set(4, 4); + codec_yuv(r, "randPixels.jpg", sizes); + + // Progressive images + sizes[0].set(512, 512); + sizes[1].set(512, 512); + sizes[2].set(512, 512); + codec_yuv(r, "brickwork-texture.jpg", sizes); + codec_yuv(r, "brickwork_normal-map.jpg", sizes); + + // A CMYK encoded image should fail. + codec_yuv(r, "CMYK.jpg", nullptr); + // A grayscale encoded image should fail. + codec_yuv(r, "grayscale.jpg", nullptr); + // A PNG should fail. + codec_yuv(r, "arrow.png", nullptr); +} -- cgit v1.2.3