From e16b04aa6041efb6507546547737e9603fa1606e Mon Sep 17 00:00:00 2001 From: msarett Date: Wed, 15 Apr 2015 07:32:19 -0700 Subject: SkJpegCodec Enables basic decoding for jpegs Includes rewinding 565, YUV, and Jpeg encoding are not yet implemented BUG=skia:3257 Review URL: https://codereview.chromium.org/1076923002 --- tests/CodexTest.cpp | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'tests/CodexTest.cpp') diff --git a/tests/CodexTest.cpp b/tests/CodexTest.cpp index a771716a24..d7142518a3 100644 --- a/tests/CodexTest.cpp +++ b/tests/CodexTest.cpp @@ -104,6 +104,13 @@ DEF_TEST(Codec, r) { check(r, "color_wheel.gif", SkISize::Make(128, 128), false); check(r, "randPixels.gif", SkISize::Make(8, 8), false); + // JPG + check(r, "CMYK.jpg", SkISize::Make(642, 516), false); + check(r, "color_wheel.jpg", SkISize::Make(128, 128), false); + check(r, "grayscale.jpg", SkISize::Make(128, 128), false); + check(r, "mandrill_512_q075.jpg", SkISize::Make(512, 512), false); + check(r, "randPixels.jpg", SkISize::Make(8, 8), false); + // PNG check(r, "arrow.png", SkISize::Make(187, 312), true); check(r, "baby_tux.png", SkISize::Make(240, 246), true); @@ -148,3 +155,46 @@ DEF_TEST(Codec_leaks, r) { test_invalid_stream(r, emptyIco, sizeof(emptyIco)); test_invalid_stream(r, emptyGif, sizeof(emptyGif)); } + +static void test_dimensions(skiatest::Reporter* r, const char path[]) { + // Create the codec from the resource file + SkAutoTDelete stream(resource(path)); + if (!stream) { + SkDebugf("Missing resource '%s'\n", path); + return; + } + SkAutoTDelete codec(SkCodec::NewFromStream(stream.detach())); + if (!codec) { + ERRORF(r, "Unable to create codec '%s'", path); + return; + } + + // Check that the decode is successful for a variety of scales + for (float scale = -0.05f; scale < 2.0f; scale += 0.05f) { + // Scale the output dimensions + SkISize scaledDims = codec->getScaledDimensions(scale); + SkImageInfo scaledInfo = codec->getInfo().makeWH(scaledDims.width(), scaledDims.height()); + + // Set up for the decode + size_t rowBytes = scaledDims.width() * sizeof(SkPMColor); + size_t totalBytes = scaledInfo.getSafeSize(rowBytes); + SkAutoTMalloc pixels(totalBytes); + + SkImageGenerator::Result result = + codec->getPixels(scaledInfo, pixels.get(), rowBytes, NULL, NULL, NULL); + REPORTER_ASSERT(r, SkImageGenerator::kSuccess == result); + } +} + +// Ensure that onGetScaledDimensions returns valid image dimensions to use for decodes +DEF_TEST(Codec_Dimensions, r) { + // JPG + test_dimensions(r, "CMYK.jpg"); + test_dimensions(r, "color_wheel.jpg"); + test_dimensions(r, "grayscale.jpg"); + test_dimensions(r, "mandrill_512_q075.jpg"); + test_dimensions(r, "randPixels.jpg"); +} + + + -- cgit v1.2.3